членовите

Кои се моделите за дизајн: зошто да ги користите, класификација, добрите и лошите страни

Во софтверското инженерство, шемите за дизајн се оптимални решенија за проблемите кои вообичаено се појавуваат во дизајнот на софтверот.

Тие се како претпроектиdefinite, испробани и проверени алатки кои можете да ги приспособите за да решите повторлив проблем со дизајнот во вашиот код.

Проценето време за читање: 6 минути

Што е модел на дизајн

Дизајнерскиот шаблон не е код што можеме да го копираме и вметнеме во нашата програма, како што можеме да направиме со стандардните функции или библиотеки. Дизајнерскиот шаблон е општ концепт способен да реши одреден проблем. Во основа модел чии детали можеме да ги следиме и да имплементираме решение кое одговара на реалноста на нашата програма.

Моделите често се мешаат со алгоритми, бидејќи и двата концепта опишуваат типични решенија за некои познати проблеми. Додека еден алгоритам defiАко секогаш постои јасен сет на акции со кои може да се постигне одредена цел, моделот е опис на решението од повисоко ниво. Кодот од истиот модел применет на две различни програми може да биде различен.

Сакајќи да направиме аналогија, можеме да смислиме рецепт за готвење: и двете имаат јасни чекори за постигнување на целта. Сепак, моделот е повеќе како проект, од кој можете да видите каков е резултатот и неговите карактеристики, но точниот редослед на имплементација зависи од нас кои го пишуваме кодот.

Од што е направен моделот за дизајн?

Повеќето модели се опишани многу формално, така што луѓето можат да ги репродуцираат во многу контексти. Да ги видиме подолу елементите што се присутни во описот на моделот:

  • Намерата на моделот накратко го опишува и проблемот и решението.
  • Мотивацијата дополнително го објаснува проблемот и решението кое моделот го овозможува.
  • Структура на класи го прикажува секој дел од моделот и како тие се поврзани.
  • Пример за код на еден од најпопуларните програмски јазици го олеснува разбирањето на идејата зад моделот.

Зошто да ги користите?

Програмер може да развие софтвер без да знае за постоењето на модели на дизајн. Многумина го прават тоа, и поради оваа причина спроведуваат некои шеми без да го знаат тоа. Но, тогаш зошто треба да трошиме време за да ги научиме?

  • Моделите на дизајнот се комплет од испробани и проверени решенија до вообичаени проблеми во дизајнот на софтверот. Дури и ако никогаш не наидете на овие проблеми, познавањето на обрасците е сепак корисно бидејќи ве учи како да ги решавате сите видови проблеми користејќи објектно-ориентирани принципи на дизајн.
  • Дизајнерските модели defiТие создаваат заеднички јазик што вие и вашиот тим можете да го користите за поефективна комуникација. Може да кажете: „Ох, само користете Синглтон за да го направите ова“, и секој ќе ја разбере идејата зад вашиот предлог. Нема потреба да објаснувате што е сингл ако ја знаете шемата и неговото име.

Класификација на модели на дизајн

Дизајнерските шеми се разликуваат по сложеност, ниво на детали и обем на применливост низ дизајнираниот систем.

По аналогија, можеме да ја направиме раскрсницата побезбедна со инсталирање на неколку семафори или изградба на цела клучка на повеќе нивоа со подземни премини за пешаци.

Најчесто се нарекуваат најосновните модели на ниско ниво идиоми . Тие обично се однесуваат само на еден програмски јазик.

Најуниверзални и модели на високо ниво се архитектонски модели . Програмерите можат да ги имплементираат овие обрасци на буквално секој јазик. За разлика од другите обрасци, тие можат да се користат за дизајнирање на архитектурата на цела апликација.

Понатаму, сите модели можат да се класифицираат според нивната се обиде или цел. Трите главни класи се:

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.
  • Креативни модели тие обезбедуваат механизми за создавање објекти кои ја зголемуваат флексибилноста и повторната употреба на постоечкиот код.
  • Структурни модели тие објаснуваат како да се соберат објекти и класи во поголеми структури, одржувајќи ги овие структури флексибилни и ефикасни.
  • Модели на однесување тие се занимаваат со ефективна комуникација и доделување одговорности меѓу објектите.

Пример за дизајн модел во Ларавел: Фасада

Фасада е структурен дизајн шема кој обезбедува поедноставен интерфејс за библиотека, рамка или кој било друг комплексен сет на класи.

Проблем

Да претпоставиме дека треба да направиме софтвер да работи, врз основа на голем сет на објекти кои припаѓаат на софистицирана библиотека или рамка. Нормално, ќе треба да ги иницијализираме сите овие објекти, да ги следиме зависностите, да ги извршуваме методите во правилен редослед итн.

Како резултат на тоа, деловната логика на класите ќе стане цврсто поврзана со деталите за имплементацијата на класите од трети страни, што ќе го отежне нивното разбирање и управување.

Решение

на 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

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Последни написи

Veeam ја има најсеопфатната поддршка за ransomware, од заштита до одговор и обновување

Coveware од Veeam ќе продолжи да обезбедува услуги за одговор на инциденти на сајбер изнуда. Coveware ќе понуди форензика и способности за санација…

Април 23 2024

Зелена и дигитална револуција: Како предвидливото одржување ја трансформира индустријата за нафта и гас

Предвидливото одржување го револуционизира секторот за нафта и гас, со иновативен и проактивен пристап кон управувањето со постројките.…

Април 22 2024

Антимонополскиот регулатор на Обединетото Кралство го покренува алармот на BigTech поради GenAI

Обединетото Кралство CMA издаде предупредување за однесувањето на Big Tech на пазарот на вештачка интелигенција. Таму…

Април 18 2024

Casa Green: енергетска револуција за одржлива иднина во Италија

Уредбата за „Case Green“, формулирана од Европската унија за подобрување на енергетската ефикасност на зградите, го заврши својот законодавен процес со…

Април 18 2024

Читајте иновации на вашиот јазик

Билтен за иновации
Не пропуштајте ги најважните вести за иновациите. Пријавете се за да ги добивате по е-пошта.

Следете нас