зүйл

Загварын хэв маяг гэж юу вэ: яагаад тэдгээрийг ашиглах, ангилал, давуу болон сул талууд

Програм хангамжийн инженерчлэлийн хувьд дизайны загвар нь програм хангамжийн дизайнд ихэвчлэн тохиолддог асуудлуудын оновчтой шийдэл юм.

Тэд өмнөх төслүүдтэй адил юмdefiТаны кодонд байнга тохиолддог дизайны асуудлыг шийдэхийн тулд өөрчлөх боломжтой, туршиж үзсэн, туршиж үзсэн хэрэгслүүд.

Тооцоолсон унших хугацаа: 6 минути

Дизайн загвар гэж юу вэ

Дизайн загвар нь стандарт функцууд эсвэл номын сантай адил хуулж аваад програмдаа оруулах код биш юм. Загварын загвар нь тодорхой асуудлыг шийдвэрлэх чадвартай ерөнхий ойлголт юм. Үндсэндээ бид нарийвчилсан мэдээллийг дагаж мөрдөж, хөтөлбөрийнхөө бодит байдалд тохирсон шийдлийг хэрэгжүүлэх боломжтой загвар юм.

Загваруудыг ихэвчлэн алгоритмтай андуурдаг, учир нь эдгээр ойлголтууд нь зарим мэдэгдэж буй асуудлын ердийн шийдлүүдийг тодорхойлдог. Алгоритм байхад defiХэрэв тодорхой зорилгод хүрч чадах тодорхой үйлдлүүд үргэлж байдаг бол загвар нь шийдлийн дээд түвшний тайлбар юм. Хоёр өөр программд хэрэглэгдэх нэг загварын код өөр байж болно.

Аналогийг хийхийг хүсвэл бид хоол хийх жорыг бодож болно: хоёуланд нь зорилгодоо хүрэх тодорхой алхамууд байдаг. Гэсэн хэдий ч загвар нь төсөлтэй илүү төстэй бөгөөд үүний үр дүн, түүний шинж чанарууд юу болохыг харж болно, гэхдээ хэрэгжүүлэх яг дараалал нь кодыг бичдэг хүнээс хамаарна.

Дизайн загвар юунаас бүтдэг вэ?

Ихэнх хэв маягийг маш албан ёсоор дүрсэлсэн байдаг тул хүмүүс тэдгээрийг олон нөхцөл байдалд хуулбарлах боломжтой. Загварын тайлбарт байгаа элементүүдийг доороос харцгаая.

  • Зорилго загвар нь асуудал болон шийдлийн аль алиныг нь товч тайлбарладаг.
  • Хүсэл эрмэлзэл загвар нь боломжтой болгож буй асуудал, шийдлийг цааш нь тайлбарлана.
  • Бүтэц Ангиуд нь загварын хэсэг бүр, тэдгээр нь хэрхэн холбоотой болохыг харуулдаг.
  • Кодын жишээ Хамгийн алдартай програмчлалын хэлнүүдийн нэг нь загварын цаад санааг ойлгоход хялбар болгодог.

Яагаад тэдгээрийг ашиглах вэ?

Програмист хүн дизайны хэв маяг байгааг мэдэхгүй байж программ хангамжийг хөгжүүлж чадна. Олонх нь үүнийг хийдэг бөгөөд энэ шалтгааны улмаас тэд зарим схемийг мэдэлгүйгээр хэрэгжүүлдэг. Гэхдээ бид яагаад тэдэнд суралцах цаг гаргах ёстой гэж?

  • Загварын загварууд нь иж бүрдэл юм туршиж үзсэн шийдлүүд програм хангамжийн дизайны нийтлэг асуудлууд. Хэдийгээр та эдгээр асуудлуудтай хэзээ ч тулгардаггүй байсан ч гэсэн хэв маягийг мэдэх нь объект хандалтат дизайны зарчмуудыг ашиглан бүх төрлийн асуудлыг хэрхэн шийдвэрлэхийг зааж өгдөг тул ашигтай хэвээр байна.
  • Дизайн загварууд defiТэд та болон танай баг илүү үр дүнтэй харилцахын тулд ашиглах нийтлэг хэлийг бий болгодог. Та "Өө, үүнийг хийхийн тулд зүгээр л Singleton ашигла" гэж хэлж болно, тэгвэл бүгд таны саналын цаад санааг ойлгох болно. Загвар болон нэрийг нь мэддэг бол синглтон гэж юу болохыг тайлбарлах шаардлагагүй.

Загварын хэв маягийн ангилал

Дизайн загварууд нь нарийн төвөгтэй байдал, нарийвчлалын түвшин, зохион бүтээгдсэн системд хэрэглэх цар хүрээ зэргээрээ ялгаатай байдаг.

Үүнтэй адилаар бид хэд хэдэн гэрлэн дохио тавих эсвэл явган зорчигчдод зориулсан газар доорхи гарц бүхий олон түвшний уулзвар барих замаар уулзварыг аюулгүй болгож чадна.

Хамгийн энгийн, доод түвшний загваруудыг ихэвчлэн дууддаг хэлц үгс . Тэдгээр нь ихэвчлэн зөвхөн нэг програмчлалын хэлэнд хамаарна.

Хамгийн түгээмэл, өндөр түвшний загварууд архитектурын загварууд . Хөгжүүлэгчид эдгээр хэв маягийг бараг ямар ч хэл дээр хэрэгжүүлэх боломжтой. Бусад загвараас ялгаатай нь тэдгээрийг бүхэл бүтэн хэрэглээний архитектурыг зохион бүтээхэд ашиглаж болно.

Цаашилбал, бүх загварыг тэдгээрийн дагуу ангилж болно оролдсон эсвэл зорилго. Гурван үндсэн анги нь:

Инновацийн мэдээллийн товхимол
Инновацийн талаарх хамгийн чухал мэдээг бүү алдаарай. Тэднийг имэйлээр хүлээн авахын тулд бүртгүүлнэ үү.
  • Бүтээлийн загварууд тэдгээр нь одоо байгаа кодын уян хатан байдал, дахин ашиглалтыг нэмэгдүүлэх объект үүсгэх механизмыг хангадаг.
  • Бүтцийн загварууд Тэд объект, ангиудыг хэрхэн илүү том бүтэц болгон угсарч, эдгээр бүтцийг уян хатан, үр ашигтай байлгах талаар тайлбарладаг.
  • Зан үйлийн загварууд Тэд объект хоорондын үр дүнтэй харилцаа холбоо, үүрэг хариуцлагыг хуваарилах асуудлыг шийддэг.

Ларавел дахь дизайны загварын жишээ: Фасад

Гадна фасад нь номын сан, фреймворк эсвэл бусад цогц ангиудын хялбаршуулсан интерфейсээр хангадаг бүтцийн дизайны загвар юм.

Асуудал

Нарийвчилсан номын сан эсвэл фреймворкт хамаарах олон тооны объект дээр тулгуурлан програм хангамжийг ажиллуулах шаардлагатай байна гэж бодъё. Ер нь бид эдгээр бүх объектыг эхлүүлэх, хамаарлыг хянах, аргуудыг зөв дарааллаар гүйцэтгэх гэх мэт шаардлагатай байдаг.

Үүний үр дүнд ангиудын бизнесийн логик нь гуравдагч талын ангиудын хэрэгжилтийн нарийвчилсан мэдээлэлтэй нягт уялдаж, ойлгох, удирдахад хэцүү болно.

Шийдэл

Una facade олон хөдөлгөөнт хэсгүүдийг агуулсан цогц дэд системд энгийн интерфейсээр хангадаг анги юм. А facade дэд системтэй шууд ажиллахтай харьцуулахад хязгаарлагдмал функцээр хангаж болно. Гэсэн хэдий ч энэ нь зөвхөн үйлчлүүлэгчдэд үнэхээр чухал ач холбогдолтой функцуудыг агуулдаг.

Байна уу facade Энэ нь бид програмыг олон арван функц бүхий боловсронгуй номын сантай нэгтгэх шаардлагатай үед хэрэг болох боловч бидэнд түүний үйл ажиллагааны багахан хэсэг л хэрэгтэй.

Жишээлбэл, мууртай богино хэмжээний хөгжилтэй видеонуудыг олон нийтийн сүлжээнд байршуулдаг програм нь мэргэжлийн видео хөрвүүлэх номын санг ашиглах боломжтой. Гэсэн хэдий ч бидэнд үнэхээр хэрэгтэй зүйл бол ганц аргатай анги юм encode(filename, format). Ийм анги үүсгэж, видео хөрвүүлэх номын санд холбосны дараа бид анхныхаа ангитай болно facade.

Жишээлбэл, дуудлагын төвийн утасны оператор нь а facade. Уг нь бид дэлгүүрийн утасны үйлчилгээ рүү утасдаж захиалга өгөхөд оператор нь манайх facade дэлгүүрийн бүх үйлчилгээ, тасаг руу. Оператор нь захиалгын систем, төлбөрийн гарц, төрөл бүрийн хүргэлтийн үйлчилгээнд энгийн дуут интерфейсээр хангадаг.

PHP дээрх бодит жишээ

Бодох Гадна фасад зарим нарийн төвөгтэй дэд системүүдийн энгийн адаптер болгон. Facade Нэг анги доторх нарийн төвөгтэй байдлыг тусгаарлаж, бусад програмын кодыг энгийн интерфейсийг ашиглах боломжийг олгодог.

Энэ жишээнд, Facade YouTube API болон 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 нь хамгаалалтаас авахуулаад хариу арга хэмжээ авах, сэргээх хүртэл ransomware-ийн хамгийн цогц дэмжлэгийг үзүүлдэг

Coveware by Veeam нь кибер хулгайн гэмт хэргийн хариу арга хэмжээг үргэлжлүүлэн үзүүлэх болно. Coveware нь шүүх эмнэлэг, нөхөн сэргээх чадварыг санал болгоно ...

23 Дөрөвдүгээр сар 2024

Ногоон ба дижитал хувьсгал: Урьдчилан таамагласан засвар үйлчилгээ нь газрын тос, байгалийн хийн салбарыг хэрхэн өөрчилж байна вэ?

Урьдчилан таамагласан засвар үйлчилгээ нь газрын тос, байгалийн хийн салбарт хувьсгал хийж, үйлдвэрийн менежментэд шинэлэг, санаачлагатай ханддаг.…

22 Дөрөвдүгээр сар 2024

Их Британийн монополийн эсрэг зохицуулагч GenAI-тай холбоотойгоор BigTech-ийн түгшүүр төрүүлэв

Их Британийн CMA хиймэл оюун ухааны зах зээл дэх Big Tech-ийн зан байдлын талаар анхааруулга гаргажээ. Тэнд…

18 Дөрөвдүгээр сар 2024

Casa Green: Италийн тогтвортой ирээдүйн төлөөх эрчим хүчний хувьсгал

Барилгын эрчим хүчний үр ашгийг дээшлүүлэх зорилгоор Европын холбооноос гаргасан "Case Green" тогтоол нь хууль тогтоох үйл явцаа дуусгасан ...

18 Дөрөвдүгээр сар 2024

Инновацийг өөрийн хэлээр уншаарай

Инновацийн мэдээллийн товхимол
Инновацийн талаарх хамгийн чухал мэдээг бүү алдаарай. Тэднийг имэйлээр хүлээн авахын тулд бүртгүүлнэ үү.

биднийг дагаарай