ፅሁፎች

የንድፍ ንድፎች ምንድን ናቸው: ለምን እንደሚጠቀሙባቸው, ምደባ, ጥቅሞች እና ጉዳቶች

በሶፍትዌር ኢንጂነሪንግ ውስጥ የንድፍ ቅጦች በሶፍትዌር ዲዛይን ውስጥ ለሚከሰቱ ችግሮች በጣም ጥሩ መፍትሄዎች ናቸው።

ልክ እንደ ቅድመ ፕሮጀክቶች ናቸውdefiበኮድዎ ውስጥ ተደጋጋሚ የንድፍ ችግርን ለመፍታት ማበጀት የሚችሏቸው፣ የተሞከሩ እና የተሞከሩ መሳሪያዎች።

የሚገመተው የንባብ ጊዜ፡- 6 ደቂቃ

የንድፍ ንድፍ ምንድን ነው

መደበኛ ተግባራትን ወይም ቤተ-መጻሕፍትን እንደምናደርገው የዲዛይን ንድፍ ቀድመን ወደ ፕሮግራማችን የምናስገባበት ኮድ አይደለም። የንድፍ ንድፍ አንድን ልዩ ችግር ለመፍታት የሚችል አጠቃላይ ጽንሰ-ሐሳብ ነው. በመሠረቱ ዝርዝሮቹን መከተል እና ከፕሮግራማችን እውነታ ጋር የሚስማማ መፍትሄን ተግባራዊ ማድረግ የምንችልበት ሞዴል.

ሞዴሎች ብዙውን ጊዜ ከአልጎሪዝም ጋር ይደባለቃሉ, ምክንያቱም ሁለቱም ጽንሰ-ሐሳቦች ለአንዳንድ ለሚታወቁ ችግሮች የተለመዱ መፍትሄዎችን ይገልጻሉ. ስልተ ቀመር ሳለ defiአንድ የተወሰነ ግብ ላይ ለመድረስ ሁልጊዜ ግልጽ የሆኑ የድርጊቶች ስብስብ ካለ, ሞዴል የመፍትሄው ከፍተኛ ደረጃ መግለጫ ነው. በሁለት የተለያዩ ፕሮግራሞች ላይ የሚተገበረው ተመሳሳይ ሞዴል ኮድ የተለየ ሊሆን ይችላል.

ተመሳሳይነት ለማድረግ ስለፈለግን የምግብ አዘገጃጀት መመሪያን ማሰብ እንችላለን-ሁለቱም ግቡን ለማሳካት ግልጽ እርምጃዎች አሏቸው. ይሁን እንጂ አንድ ሞዴል እንደ አንድ ፕሮጀክት የበለጠ ነው, ውጤቱም ምን እንደሆነ እና ባህሪያቱ ምን እንደሆነ ማየት ይችላሉ, ነገር ግን የአተገባበሩ ትክክለኛ ቅደም ተከተል ኮዱን በምንጽፈው ላይ ይወሰናል.

የንድፍ ንድፍ ከምን የተሠራ ነው?

ሰዎች በብዙ አውድ ውስጥ እንደገና ማባዛት እንዲችሉ አብዛኛዎቹ ቅጦች በጣም በመደበኛነት ተገልጸዋል። በአምሳያው መግለጫ ውስጥ ያሉትን ንጥረ ነገሮች ከዚህ በታች እንይ ።

  • ዓላማው የአምሳያው ሞዴል ሁለቱንም ችግሩን እና መፍትሄውን በአጭሩ ይገልጻል.
  • ተነሳሽነት ችግሩን እና ሞዴሉ የሚቻልበትን መፍትሄ የበለጠ ያብራራል.
  • መዋቅር የክፍሎች እያንዳንዱን ሞዴል እና እንዴት እንደሚዛመዱ ያሳያል.
  • የኮድ ምሳሌ በጣም ታዋቂ ከሆኑ የፕሮግራም ቋንቋዎች በአንዱ ከአምሳያው በስተጀርባ ያለውን ሀሳብ ለመረዳት ቀላል ያደርገዋል።

ለምን ተጠቀምባቸው?

ፕሮግራመር የንድፍ ንድፎችን መኖሩን ሳያውቅ ሶፍትዌርን ማዘጋጀት ይችላል. ብዙዎቹ ያደርጉታል, እና በዚህ ምክንያት ሳያውቁት አንዳንድ እቅዶችን ይተገብራሉ. ግን ለምን እነሱን በመማር ጊዜ እናጠፋለን?

  • የንድፍ ንድፎች ስብስብ ናቸው የተሞከሩ እና የተሞከሩ መፍትሄዎች በሶፍትዌር ዲዛይን ውስጥ ወደ የተለመዱ ችግሮች. እነዚህን ችግሮች ጨርሶ ባያጋጥሙዎትም, ንድፎችን ማወቅ አሁንም ጠቃሚ ነው, ምክንያቱም ነገሮችን ተኮር የንድፍ መርሆዎችን በመጠቀም ሁሉንም አይነት ችግሮች እንዴት እንደሚፈቱ ያስተምራል.
  • የንድፍ ሞዴሎች defiእርስዎ እና ቡድንዎ የበለጠ ውጤታማ በሆነ መንገድ ለመግባባት የሚጠቀሙበት የጋራ ቋንቋ ይፈጥራሉ። “ኦህ፣ ይህንን ለማድረግ ነጠላ ዜማ ብቻ ተጠቀም” ማለት ትችላለህ፣ እና ሁሉም ሰው ከአስተያየትህ በስተጀርባ ያለውን ሃሳብ ይገነዘባል። ስርዓተ-ጥለትን እና ስሙን ካወቁ ነጠላ ቶን ምን እንደሆነ ማብራራት አያስፈልግም።

የንድፍ ንድፎችን ምደባ

የንድፍ ቅጦች ውስብስብነት፣ የዝርዝሮች ደረጃ እና በተቀየሰው ስርዓት ውስጥ በተፈጻሚነት መጠን ይለያያሉ።

በተመሣሣይ ሁኔታ፣ ጥቂት የትራፊክ መብራቶችን በመትከል ወይም ሙሉ ባለ ብዙ ደረጃ ልውውጥን ለእግረኞች ከመሬት በታች መተላለፊያ በመገንባት መገናኛውን ደህንነቱ የተጠበቀ ማድረግ እንችላለን።

በጣም መሠረታዊ, ዝቅተኛ ደረጃ ሞዴሎች ብዙውን ጊዜ ይባላሉ ፈሊጦች . አብዛኛውን ጊዜ የሚተገበሩት ለአንድ የፕሮግራም አወጣጥ ቋንቋ ብቻ ነው።

በጣም ሁለንተናዊ እና ከፍተኛ ደረጃ ሞዴሎች ናቸው የሕንፃ ሞዴሎች . ገንቢዎች እነዚህን ቅጦች በማንኛውም ቋንቋ ሊተገበሩ ይችላሉ። እንደሌሎች ቅጦች በተለየ መልኩ የአንድን ሙሉ መተግበሪያ አርክቴክቸር ለመንደፍ ሊያገለግሉ ይችላሉ።

በተጨማሪም, ሁሉም ሞዴሎች እንደየራሳቸው ሊከፋፈሉ ይችላሉ ሞክሯል። ወይም ዓላማ. ሦስቱ ዋና ክፍሎች የሚከተሉት ናቸው-

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።
  • የፈጠራ ሞዴሎች ተለዋዋጭነትን የሚጨምሩ እና ያለውን ኮድ እንደገና ጥቅም ላይ የሚውሉ ነገሮችን የመፍጠር ዘዴዎችን ይሰጣሉ።
  • መዋቅራዊ ሞዴሎች እነዚህ መዋቅሮች ተለዋዋጭ እና ቀልጣፋ እንዲሆኑ በማድረግ ዕቃዎችን እና ክፍሎችን ወደ ትላልቅ መዋቅሮች እንዴት እንደሚገጣጠሙ ያብራራሉ.
  • የባህሪ ሞዴሎች ውጤታማ ግንኙነትን እና በእቃዎች መካከል ያሉ ሀላፊነቶችን መመደብን ያከናውናሉ.

የንድፍ ንድፍ ምሳሌ በላራቬል፡ ፊት ለፊት

ፊት ለፊት ለቤተ-መጻህፍት፣ ማዕቀፍ ወይም ለሌላ ውስብስብ የክፍል ስብስብ ቀለል ያለ በይነገጽ የሚሰጥ መዋቅራዊ ንድፍ ንድፍ ነው።

ችግር

በተራቀቀ ቤተ-መጽሐፍት ወይም ማዕቀፍ ውስጥ ባሉ ብዙ ዕቃዎች ላይ በመመስረት ሶፍትዌሮችን መሥራት አለብን ብለን እናስብ። በመደበኛነት, እነዚህን ሁሉ ነገሮች ማስጀመር, ጥገኞችን መከታተል, ዘዴዎችን በትክክለኛው ቅደም ተከተል ማከናወን, ወዘተ.

በውጤቱም ፣ የክፍሎቹ የንግድ አመክንዮ ከሦስተኛ ወገን ክፍሎች ትግበራ ዝርዝሮች ጋር በጥብቅ ይጣመራል ፣ ይህም ለመረዳት እና ለማስተዳደር አስቸጋሪ ያደርጋቸዋል።

መፍትሔው

ዩነ facade ብዙ ተንቀሳቃሽ ክፍሎችን ለያዘ ውስብስብ ንዑስ ስርዓት ቀላል በይነገጽ የሚሰጥ ክፍል ነው። ሀ facade ከንዑስ ስርዓቱ ጋር በቀጥታ ከመሥራት ጋር ሲነፃፀር የተወሰነ ተግባር ሊሰጥ ይችላል። ነገር ግን፣ ደንበኞቻችን በእውነት የሚጨነቁባቸውን ባህሪያት ብቻ ያካትታል።

አንድ ይኑርዎት facade መተግበሪያውን በደርዘን የሚቆጠሩ ባህሪያት ካለው ውስብስብ ቤተ-መጽሐፍት ጋር ማዋሃድ ሲያስፈልገን ጠቃሚ ነው፣ ነገር ግን የተግባርነቱ ትንሽ ክፍል ብቻ ነው የሚያስፈልገን።

ለምሳሌ፣ አጫጭር አስቂኝ ቪዲዮዎችን ከድመቶች ጋር ወደ ማህበራዊ ሚዲያ የሚሰቅል መተግበሪያ ፕሮፌሽናል የቪዲዮ ልወጣ ቤተ-መጽሐፍትን ሊጠቀም ይችላል። ሆኖም፣ እኛ በእርግጥ የሚያስፈልገን ነጠላ ዘዴ ያለው ክፍል ብቻ ነው። encode(filename, format). እንደዚህ አይነት ክፍል ከፈጠርን እና ከቪዲዮ መለወጫ ቤተ-መጽሐፍት ጋር ካገናኘን በኋላ, የመጀመሪያው ይኖረናል facade.

ለምሳሌ የጥሪ ማእከል የስልክ ኦፕሬተር እንደ ሀ facade. እንዲያውም የሱቅ ስልክ አገልግሎት ስንደውል ስልክ ለማዘዝ ኦፕሬተር የኛ ነው። facade ወደ ሁሉም የመደብር አገልግሎቶች እና ክፍሎች. ኦፕሬተሩ ለትዕዛዝ ስርዓቱ፣ ለክፍያ መግቢያዎች እና ለተለያዩ የመላኪያ አገልግሎቶች ቀላል የድምጽ በይነገጽ ይሰጣል።

እውነተኛ ምሳሌ በ PHP ውስጥ

ስለሆነ ነገር ማሰብ ፊት ለፊት ለአንዳንድ ውስብስብ ንዑስ ስርዓቶች እንደ ቀላል አስማሚ። Facade በነጠላ ክፍል ውስጥ ያለውን ውስብስብነት ይለያል እና ሌሎች የመተግበሪያ ኮድ ቀላሉን በይነገጽ እንዲጠቀሙ ይፈቅዳል።

በዚህ ምሳሌ እ.ኤ.አ. Facade የዩቲዩብ ኤፒአይ እና FFmpeg ቤተ-መጽሐፍትን ውስብስብነት ከደንበኛ ኮድ ይደብቃል። ደንበኛው በደርዘን የሚቆጠሩ ክፍሎች ከመሥራት ይልቅ ቀላል ዘዴን በ Facade ላይ ይጠቀማል.

<?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

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

የቅርብ ጊዜ ጽሁፎች

Veeam ከጥበቃ እስከ ምላሽ እና ማገገሚያ ድረስ ለቤዛዌር በጣም አጠቃላይ ድጋፍን ያቀርባል

Coveware by Veeam የሳይበር ዘረፋ የአደጋ ምላሽ አገልግሎቶችን መስጠቱን ይቀጥላል። Coveware የፎረንሲክስ እና የማገገሚያ ችሎታዎችን ያቀርባል…

23 April 2024

አረንጓዴ እና ዲጂታል አብዮት፡- የመተንበይ ጥገና የነዳጅ እና ጋዝ ኢንዱስትሪን እንዴት እየለወጠ ነው።

የመተንበይ ጥገና የዘይት እና ጋዝ ዘርፉን አብዮት እያደረገ ነው፣ ለዕፅዋት አስተዳደር ፈጠራ እና ንቁ አቀራረብ።…

22 April 2024

የዩኬ ፀረ እምነት ተቆጣጣሪ የBigTech ማንቂያ በጄኔአይ ላይ ያስነሳል።

የዩኬ ሲኤምኤ ስለ ቢግ ቴክ ባህሪ በአርቴፊሻል ኢንተለጀንስ ገበያ ላይ ማስጠንቀቂያ ሰጥቷል። እዚያ…

18 April 2024

ካሳ አረንጓዴ፡ ለወደፊት ጣሊያን የኢነርጂ አብዮት

የሕንፃዎችን ኢነርጂ ውጤታማነት ለማሳደግ በአውሮፓ ህብረት የተቀረፀው የ"ኬዝ አረንጓዴ" ድንጋጌ የህግ አውጭ ሂደቱን በ…

18 April 2024

ፈጠራን በቋንቋዎ ያንብቡ

የኢኖቬሽን ጋዜጣ
በፈጠራ ላይ በጣም አስፈላጊ የሆነውን ዜና እንዳያመልጥዎት። በኢሜል ለመቀበል ይመዝገቡ።

ይከተሉን