ලිපි

මෝස්තර රටා යනු කුමක්ද: ඒවා භාවිතා කරන්නේ ඇයි, වර්ගීකරණය, වාසි සහ අවාසි

මෘදුකාංග ඉංජිනේරු විද්‍යාවේදී, මෘදුකාංග නිර්මාණකරණයේදී සාමාන්‍යයෙන් සිදුවන ගැටළු සඳහා නිර්මාණ රටා ප්‍රශස්ත විසඳුම් වේ.

ඒවා හරියට පූර්ව ව්‍යාපෘති වගේdefiඔබගේ කේතයේ පුනරාවර්තන සැලසුම් ගැටළුවක් විසඳීමට ඔබට අභිරුචිකරණය කළ හැකි නයිට්, උත්සාහ කළ සහ පරීක්ෂා කරන ලද මෙවලම්.

ඇස්තමේන්තුගත කියවීමේ කාලය: 6 මිනුටි

නිර්මාණ රටාවක් යනු කුමක්ද?

සැලසුම් රටාවක් යනු අපට සම්මත කාර්යයන් හෝ පුස්තකාල සමඟ කළ හැකි පරිදි, අපගේ වැඩසටහනට පිටපත් කර ඇතුළු කළ හැකි කේතයක් නොවේ. සැලසුම් රටාව යනු විශේෂිත ගැටළුවක් විසඳීමට හැකියාව ඇති පොදු සංකල්පයකි. මූලික වශයෙන් අපට අපගේ වැඩසටහනේ යථාර්ථයට ගැලපෙන විසඳුමක් අනුගමනය කළ හැකි සහ ක්‍රියාත්මක කළ හැකි ආකෘතියක්.

ආකෘති බොහෝ විට ඇල්ගොරිතම සමඟ ව්‍යාකූල වේ, මන්ද සංකල්ප දෙකම සමහර දන්නා ගැටළු සඳහා සාමාන්‍ය විසඳුම් විස්තර කරයි. ඇල්ගොරිතමයක් අතරතුර defiනිශ්චිත ඉලක්කයක් සපුරා ගත හැකි පැහැදිලි ක්‍රියා මාලාවක් සෑම විටම තිබේ නම්, ආකෘතියක් යනු විසඳුමක් පිළිබඳ ඉහළ මට්ටමේ විස්තරයකි. විවිධ වැඩසටහන් දෙකකට අදාළ එකම ආකෘතියේ කේතය වෙනස් විය හැකිය.

ප්‍රතිසමයක් කිරීමට අවශ්‍ය නම්, අපට ඉවුම් පිහුම් වට්ටෝරුවක් ගැන සිතිය හැකිය: ඉලක්කයක් සපුරා ගැනීමට දෙදෙනාටම පැහැදිලි පියවර තිබේ. කෙසේ වෙතත්, ආකෘතියක් යනු ව්‍යාපෘතියක් වැනි ය, එහි ප්‍රති result ලය සහ එහි ලක්ෂණ මොනවාදැයි ඔබට දැක ගත හැකිය, නමුත් ක්‍රියාත්මක කිරීමේ නියම අනුපිළිවෙල රඳා පවතින්නේ කේතය ලියන අප මත ය.

නිර්මාණ රටාවක් සෑදී ඇත්තේ කුමක් ද?

බොහෝ රටා ඉතා විධිමත් ලෙස විස්තර කර ඇති අතර එමඟින් මිනිසුන්ට ඒවා බොහෝ සන්දර්භයන් තුළ ප්‍රතිනිෂ්පාදනය කළ හැකිය. ආකෘතියක් පිළිබඳ විස්තරයේ ඇති මූලද්රව්ය පහතින් බලමු:

  • චේතනාව ආකෘතියේ ගැටලුව සහ විසඳුම යන දෙකම කෙටියෙන් විස්තර කරයි.
  • අභිප්රේරණය ආකෘතිය මගින් ඇති කරවන ගැටලුව සහ විසඳුම තවදුරටත් පැහැදිලි කරයි.
  • ව්යුහය පන්තිවල ආකෘතියේ එක් එක් කොටස් සහ ඒවා සම්බන්ධ වන ආකාරය පෙන්වයි.
  • කේත උදාහරණය වඩාත් ජනප්‍රිය ක්‍රමලේඛන භාෂාවකින් ආකෘතිය පිටුපස ඇති අදහස තේරුම් ගැනීම පහසු කරයි.

ඒවා භාවිතා කරන්නේ ඇයි?

ක්‍රමලේඛකයෙකුට නිර්මාණ රටා පවතින බව නොදැන මෘදුකාංග සංවර්ධනය කළ හැක. බොහෝ දෙනෙක් එසේ කරන අතර, මේ හේතුව නිසා ඔවුන් නොදැනුවත්වම සමහර යෝජනා ක්රම ක්රියාත්මක කරති. නමුත් අපි ඒවා ඉගෙන ගැනීමට කාලය ගත කළ යුත්තේ ඇයි?

  • මෝස්තර රටා කට්ටලයකි උත්සාහ කර පරීක්ෂා කළ විසඳුම් මෘදුකාංග නිර්මාණයේ පොදු ගැටළු වලට. ඔබ කිසි විටෙක මෙම ගැටළු වලට මුහුණ නොදුන්නත්, රටා දැන ගැනීම තවමත් ප්‍රයෝජනවත් වන්නේ එය වස්තු-නැඹුරු නිර්මාණ මූලධර්ම භාවිතයෙන් සියලු ආකාරයේ ගැටළු විසඳන ආකාරය ඔබට උගන්වන බැවිනි.
  • නිර්මාණ ආකෘති defiඔවුන් ඔබට සහ ඔබේ කණ්ඩායමට වඩාත් ඵලදායී ලෙස සන්නිවේදනය කිරීමට භාවිතා කළ හැකි පොදු භාෂාවක් නිර්මාණය කරයි. ඔබට මෙසේ පැවසිය හැකිය, "ඔහ්, මෙය කිරීමට සිංගල්ටන් එකක් භාවිතා කරන්න", එවිට ඔබේ යෝජනාව පිටුපස ඇති අදහස සියලු දෙනාටම වැටහෙනු ඇත. රටාව සහ එහි නම දන්නේ නම් singleton යනු කුමක්දැයි පැහැදිලි කිරීම අවශ්ය නොවේ.

නිර්මාණ රටා වර්ගීකරණය

සැලසුම් කරන ලද පද්ධතිය පුරාවටම සැලසුම් රටා සංකීර්ණත්වය, විස්තර මට්ටම සහ යෙදිය හැකි පරිමාණයෙන් වෙනස් වේ.

සාදෘශ්‍යයෙන්, අපට රථවාහන ලයිට් කිහිපයක් ස්ථාපනය කිරීමෙන් හෝ පදිකයින් සඳහා භූගත ඡේද සහිත සම්පූර්ණ බහු මට්ටමේ අන්තර් හුවමාරුවක් තැනීමෙන් මංසන්ධියක් ආරක්ෂිත කළ හැකිය.

වඩාත්ම මූලික, පහත් මට්ටමේ ආකෘති බොහෝ විට හැඳින්වේ ව්යවහාර . ඒවා සාමාන්‍යයෙන් අදාළ වන්නේ එක් ක්‍රමලේඛන භාෂාවකට පමණි.

වඩාත්ම විශ්වීය සහ ඉහළ මට්ටමේ ආකෘති වේ වාස්තුවිද්යාත්මක ආකෘති . සංවර්ධකයින්ට ඕනෑම භාෂාවකින් මෙම රටා ක්‍රියාත්මක කළ හැක. අනෙකුත් රටා මෙන් නොව, සම්පූර්ණ යෙදුමක ගෘහ නිර්මාණ ශිල්පය සැලසුම් කිරීමට ඒවා භාවිතා කළ හැකිය.

තවද, සියලුම මාදිලි ඔවුන්ගේ වර්ග අනුව වර්ග කළ හැකිය උත්සාහ කළා හෝ අරමුණ. ප්රධාන පන්ති තුන වන්නේ:

නවෝත්පාදන පුවත් පත්‍රිකාව
නවෝත්පාදනය පිළිබඳ වැදගත්ම පුවත් අතපසු නොකරන්න. ඒවා විද්‍යුත් තැපෑලෙන් ලබා ගැනීමට ලියාපදිංචි වන්න.
  • නිර්මාණාත්මක ආකෘති ඒවා නම්‍යශීලී බව සහ පවතින කේත නැවත භාවිතය වැඩි කරන වස්තු නිර්මාණය කිරීමේ යාන්ත්‍රණ සපයයි.
  • ව්යුහාත්මක ආකෘති මෙම ව්‍යුහයන් නම්‍යශීලී සහ කාර්යක්ෂමව තබා ගනිමින් විශාල ව්‍යුහයන්ට වස්තු සහ පන්ති එකලස් කරන ආකාරය ඔවුන් පැහැදිලි කරයි.
  • හැසිරීම් ආකෘති ඔවුන් ඵලදායී සන්නිවේදනය සහ වස්තූන් අතර වගකීම් පැවරීම සමඟ කටයුතු කරයි.

Laravel හි නිර්මාණ රටාවේ උදාහරණය: මුහුණත

මුහුණත පුස්තකාලයකට, රාමුවකට හෝ වෙනත් සංකීර්ණ පන්ති සමූහයකට සරල කළ අතුරු මුහුණතක් සපයන ව්‍යුහාත්මක සැලසුම් රටාවකි.

ගැටලුව

සංකීර්ණ පුස්තකාලයකට හෝ රාමුවකට අයත් විශාල වස්තු සමූහයක් මත පදනම්ව, අපි මෘදුකාංග ක්‍රියා කිරීමට අවශ්‍ය යැයි සිතමු. සාමාන්‍යයෙන්, අපට මෙම සියලු වස්තූන් ආරම්භ කිරීමට, පරායත්තතා නිරීක්ෂණය කිරීමට, ක්‍රම නිවැරදි පිළිවෙලට ක්‍රියාත්මක කිරීමට සහ යනාදිය අවශ්‍ය වේ.

එහි ප්‍රතිඵලයක් වශයෙන්, පන්තිවල ව්‍යාපාරික තර්කය තෙවන පාර්ශවීය පන්තිවල ක්‍රියාත්මක කිරීමේ විස්තර සමඟ තදින් බැඳී ඇති අතර, ඒවා තේරුම් ගැනීමට සහ කළමනාකරණය කිරීමට අපහසු වේ.

විසඳුමක්

Una facade යනු බොහෝ චලනය වන කොටස් අඩංගු සංකීර්ණ උප පද්ධතියකට සරල අතුරු මුහුණතක් සපයන පන්තියකි. ඒ facade උප පද්ධතිය සමඟ සෘජුව වැඩ කිරීමට සාපේක්ෂව සීමිත ක්රියාකාරිත්වයක් සැපයිය හැකිය. කෙසේ වෙතත්, එය පාරිභෝගිකයින් සැබවින්ම සැලකිලිමත් වන විශේෂාංග පමණක් ඇතුළත් වේ.

එකක් ගන්න facade අපට විශේෂාංග දුසිම් ගණනක් ඇති නවීන පුස්තකාලයක් සමඟ යෙදුම ඒකාබද්ධ කිරීමට අවශ්‍ය වූ විට එය ප්‍රයෝජනවත් වේ, නමුත් අපට අවශ්‍ය වන්නේ එහි ක්‍රියාකාරීත්වයේ කුඩා කොටසක් පමණි.

උදාහරණයක් ලෙස, බළලුන් සමඟ කෙටි විනෝදජනක වීඩියෝ සමාජ මාධ්‍ය වෙත උඩුගත කරන යෙදුමකට වෘත්තීය වීඩියෝ පරිවර්තන පුස්තකාලයක් භාවිතා කළ හැකිය. කෙසේ වෙතත්, අපට සැබවින්ම අවශ්‍ය වන්නේ තනි ක්‍රමය සහිත පන්තියකි encode(filename, format). එවැනි පන්තියක් සාදා එය වීඩියෝ පරිවර්තන පුස්තකාලයට සම්බන්ධ කිරීමෙන් පසු, අපට අපගේ පළමු එක ලැබෙනු ඇත facade.

උදාහරණයක් ලෙස, ඇමතුම් මධ්‍යස්ථානයක දුරකථන ක්‍රියාකරු අ facade. ඇත්ත වශයෙන්ම, අපි දුරකථන ඇණවුමක් කිරීමට වෙළඳසැලක දුරකථන සේවාවට කතා කරන විට, ක්රියාකරු අපගේ වේ facade ගබඩාවේ සියලුම සේවාවන් සහ දෙපාර්තමේන්තු වෙත. ක්‍රියාකරු විසින් ඇණවුම් පද්ධතිය, ගෙවීම් දොරටු සහ විවිධ බෙදාහැරීමේ සේවාවන් සඳහා සරල හඬ අතුරු මුහුණතක් සපයයි.

PHP හි සැබෑ උදාහරණය

සිතා බලන්න මුහුණත සමහර සංකීර්ණ උප පද්ධති සඳහා සරල ඇඩප්ටරයක් ​​ලෙස. Facade තනි පන්තියක් තුළ සංකීර්ණත්වය හුදකලා කරන අතර සරල අතුරු මුහුණත භාවිතා කිරීමට වෙනත් යෙදුම් කේතයට ඉඩ සලසයි.

මෙම උදාහරණයේ, Facade YouTube API සහ FFmpeg පුස්තකාලයේ සංකීර්ණත්වය සේවාදායක කේතයෙන් සඟවයි. පන්ති දුසිම් ගනනක් සමඟ වැඩ කිරීම වෙනුවට, සේවාදායකයා ෆැසෙඩ් මත සරල ක්රමයක් භාවිතා කරයි.

<?php

namespace RefactoringGuru\Facade\RealWorld;

/**
 * The Facade provides a single method for downloading videos from YouTube. This
 * method hides all the complexity of the PHP network layer, YouTube API and the
 * video conversion library (FFmpeg).
 */
class YouTubeDownloader
{
    protected $youtube;
    protected $ffmpeg;

    /**
     * It is handy when the Facade can manage the lifecycle of the subsystem it
     * uses.
     */
    public function __construct(string $youtubeApiKey)
    {
        $this->youtube = new YouTube($youtubeApiKey);
        $this->ffmpeg = new FFMpeg();
    }

    /**
     * The Facade provides a simple method for downloading video and encoding it
     * to a target format (for the sake of simplicity, the real-world code is
     * commented-out).
     */
    public function downloadVideo(string $url): void
    {
        echo "Fetching video metadata from youtube...\n";
        // $title = $this->youtube->fetchVideo($url)->getTitle();
        echo "Saving video file to a temporary file...\n";
        // $this->youtube->saveAs($url, "video.mpg");

        echo "Processing source video...\n";
        // $video = $this->ffmpeg->open('video.mpg');
        echo "Normalizing and resizing the video to smaller dimensions...\n";
        // $video
        //     ->filters()
        //     ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
        //     ->synchronize();
        echo "Capturing preview image...\n";
        // $video
        //     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
        //     ->save($title . 'frame.jpg');
        echo "Saving video in target formats...\n";
        // $video
        //     ->save(new FFMpeg\Format\Video\X264(), $title . '.mp4')
        //     ->save(new FFMpeg\Format\Video\WMV(), $title . '.wmv')
        //     ->save(new FFMpeg\Format\Video\WebM(), $title . '.webm');
        echo "Done!\n";
    }
}

/**
 * The YouTube API subsystem.
 */
class YouTube
{
    public function fetchVideo(): string { /* ... */ }

    public function saveAs(string $path): void { /* ... */ }

    // ...more methods and classes...
}

/**
 * The FFmpeg subsystem (a complex video/audio conversion library).
 */
class FFMpeg
{
    public static function create(): FFMpeg { /* ... */ }

    public function open(string $video): void { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}

class FFMpegVideo
{
    public function filters(): self { /* ... */ }

    public function resize(): self { /* ... */ }

    public function synchronize(): self { /* ... */ }

    public function frame(): self { /* ... */ }

    public function save(string $path): self { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}


/**
 * The client code does not depend on any subsystem's classes. Any changes
 * inside the subsystem's code won't affect the client code. You will only need
 * to update the Facade.
 */
function clientCode(YouTubeDownloader $facade)
{
    // ...

    $facade->downloadVideo("https://www.youtube.com/watch?v=QH2-TGUlwu4");

    // ...
}

$facade = new YouTubeDownloader("APIKEY-XXXXXXXXX");
clientCode($facade);

Ercole Palmeri

නවෝත්පාදන පුවත් පත්‍රිකාව
නවෝත්පාදනය පිළිබඳ වැදගත්ම පුවත් අතපසු නොකරන්න. ඒවා විද්‍යුත් තැපෑලෙන් ලබා ගැනීමට ලියාපදිංචි වන්න.

මෑතකාලීන ලිපි

අතුරුමුහුණත් වෙන් කිරීමේ මූලධර්මය (ISP), සිව්වන SOLID මූලධර්මය

අතුරුමුහුණත් වෙන් කිරීමේ මූලධර්මය වස්තු-නැඹුරු නිර්මාණයේ SOLID මූලධර්ම පහෙන් එකකි. පන්තියක් තිබිය යුතුය ...

14 මැයි 2024

හොඳින් කළ විශ්ලේෂණයක් සඳහා Excel හි දත්ත සහ සූත්‍ර හොඳින් සංවිධානය කරන්නේ කෙසේද

මයික්‍රොසොෆ්ට් එක්සෙල් යනු දත්ත විශ්ලේෂණය සඳහා යොමු මෙවලමයි, මන්ද එය දත්ත කට්ටල සංවිධානය කිරීම සඳහා බොහෝ විශේෂාංග ලබා දෙයි,…

14 මැයි 2024

වැදගත් Walliance Equity Crowdfunding ව්‍යාපෘති දෙකක් සඳහා ධනාත්මක නිගමනය: Jesolo Wave Island සහ Milano Via Ravenna

2017 සිට නිශ්චල දේපල ක්‍රවුඩ් ෆන්ඩින් ක්‍ෂේත්‍රයේ යුරෝපයේ ප්‍රමුඛයන් අතර වොලියන්ස්, සිම් සහ වේදිකාව සම්පූර්ණ කිරීම නිවේදනය කරයි…

13 මැයි 2024

Filament යනු කුමක්ද සහ Laravel Filament භාවිතා කරන්නේ කෙසේද

සූත්‍රිකාව යනු "වේගවත්" Laravel සංවර්ධන රාමුවක් වන අතර එය සම්පූර්ණ කොටස් කිහිපයක් සපයයි. එය ක්‍රියාවලිය සරල කිරීම සඳහා නිර්මාණය කර ඇත…

13 මැයි 2024

කෘතිම බුද්ධි පාලනය යටතේ

“මගේ පරිණාමය සම්පූර්ණ කිරීමට මා නැවත පැමිණිය යුතුය: මම පරිගණකය තුළ ප්‍රක්ෂේපණය කර පිරිසිදු ශක්තිය බවට පත් වෙමි. පදිංචි වූ පසු…

10 මැයි 2024

Google හි නව කෘතිම බුද්ධියට DNA, RNA සහ "ජීවයේ සියලුම අණු" ආදර්ශයට ගත හැකිය

Google DeepMind සිය කෘතිම බුද්ධි ආකෘතියේ වැඩිදියුණු කළ අනුවාදයක් හඳුන්වා දෙයි. නව වැඩිදියුණු කළ ආකෘතිය සපයන්නේ පමණක් නොව…

9 මැයි 2024

Laravel's Modular Architecture ගවේෂණය කිරීම

එහි අලංකාර වාක්‍ය ඛණ්ඩය සහ ප්‍රබල අංගයන් සඳහා ප්‍රසිද්ධ Laravel, මොඩියුලර් ගෘහ නිර්මාණ ශිල්පය සඳහා ද ශක්තිමත් පදනමක් සපයයි. එතන…

9 මැයි 2024

Cisco Hypershield සහ Splunk අත්පත් කර ගැනීම ආරක්ෂාවේ නව යුගය ආරම්භ වේ

Cisco සහ Splunk පාරිභෝගිකයින්ට අනාගතයේ ආරක්ෂක මෙහෙයුම් මධ්‍යස්ථානය (SOC) වෙත ඔවුන්ගේ ගමන වේගවත් කිරීමට උදවු කරයි…

8 මැයි 2024

ඔබේ භාෂාවෙන් නවෝත්පාදනය කියවන්න

නවෝත්පාදන පුවත් පත්‍රිකාව
නවෝත්පාදනය පිළිබඳ වැදගත්ම පුවත් අතපසු නොකරන්න. ඒවා විද්‍යුත් තැපෑලෙන් ලබා ගැනීමට ලියාපදිංචි වන්න.

පසු අපට