Erthyglau

Beth yw patrymau dylunio: pam eu defnyddio, dosbarthiad, manteision ac anfanteision

Mewn peirianneg meddalwedd, patrymau dylunio yw'r atebion gorau posibl i broblemau sy'n digwydd yn aml mewn dylunio meddalwedd.

Maen nhw fel cyn-brosiectaudefioffer craff, profedig y gallwch eu haddasu i ddatrys problem ddylunio gylchol yn eich cod.

Amser darllen amcangyfrifedig: 6 minuti

Beth yw Patrwm Dylunio

Nid yw patrwm dylunio yn god y gallwn ei gopïo a'i fewnosod yn ein rhaglen, fel y gallwn ei wneud gyda swyddogaethau neu lyfrgelloedd safonol. Mae'r patrwm dylunio yn gysyniad cyffredinol sy'n gallu datrys problem benodol. Yn y bôn model y gallwn ei ddilyn a gweithredu datrysiad sy'n cyd-fynd â realiti ein rhaglen.

Mae modelau yn aml yn cael eu drysu ag algorithmau, oherwydd mae'r ddau gysyniad yn disgrifio atebion nodweddiadol i rai problemau hysbys. Er bod algorithm defiOs oes bob amser set glir o gamau gweithredu a all gyflawni nod penodol, mae model yn ddisgrifiad lefel uwch o ddatrysiad. Gall cod o'r un model a ddefnyddir ar gyfer dwy raglen wahanol fod yn wahanol.

Gan fod eisiau gwneud cyfatebiaeth, gallwn feddwl am rysáit coginio: mae gan y ddau gamau clir i gyrraedd nod. Fodd bynnag, mae model yn debycach i brosiect, y gallwch chi weld beth yw'r canlyniad a'i nodweddion, ond mae union drefn gweithredu yn dibynnu arnom ni sy'n ysgrifennu'r cod.

O beth mae Patrwm Dylunio wedi'i wneud?

Disgrifir y rhan fwyaf o batrymau yn ffurfiol iawn fel y gall pobl eu hatgynhyrchu mewn llawer o gyd-destunau. Gadewch i ni weld isod yr elfennau sy'n bresennol yn y disgrifiad o fodel:

  • Y bwriad o'r model yn disgrifio'r broblem a'r ateb yn gryno.
  • Y cymhelliant yn egluro ymhellach y broblem a'r ateb y mae'r model yn ei wneud yn bosibl.
  • Strwythur o ddosbarthiadau yn dangos pob rhan o'r model a sut maent yn gysylltiedig.
  • Yr enghraifft cod yn un o'r ieithoedd rhaglennu mwyaf poblogaidd yn ei gwneud yn haws i ddeall y syniad y tu ôl i'r model.

Pam eu defnyddio?

Gall rhaglennydd ddatblygu meddalwedd heb wybod am fodolaeth patrymau dylunio. Mae llawer yn gwneud hynny, ac am y rheswm hwn maent yn gweithredu rhai cynlluniau heb yn wybod iddynt. Ond wedyn pam dylen ni dreulio amser yn eu dysgu?

  • Mae'r patrymau dylunio yn becyn o atebion profedig problemau cyffredin mewn dylunio meddalwedd. Hyd yn oed os na fyddwch byth yn dod ar draws y problemau hyn, mae gwybod patrymau yn dal yn ddefnyddiol oherwydd mae'n eich dysgu sut i ddatrys pob math o broblemau gan ddefnyddio egwyddorion dylunio sy'n canolbwyntio ar wrthrychau.
  • Y modelau dylunio defiMaent yn creu iaith gyffredin y gallwch chi a'ch tîm ei defnyddio i gyfathrebu'n fwy effeithiol. Fe allech chi ddweud, “O, defnyddiwch Singleton i wneud hyn,” a bydd pawb yn deall y syniad y tu ôl i'ch awgrym. Nid oes angen esbonio beth yw sengl os ydych chi'n gwybod y patrwm a'i enw.

Dosbarthiad Patrymau Dylunio

Mae patrymau dylunio'n amrywio o ran cymhlethdod, lefel y manylder, a graddfa'r cymhwysedd ar draws y system a ddyluniwyd.

Trwy gyfatebiaeth, gallwn wneud croestoriad yn fwy diogel trwy osod ychydig o oleuadau traffig neu adeiladu cyfnewidfa aml-lefel gyfan gyda llwybrau tanddaearol i gerddwyr.

Gelwir y modelau lefel isel mwyaf sylfaenol yn aml priod-ddulliau . Fel arfer maent yn berthnasol i un iaith raglennu yn unig.

Mae'r modelau mwyaf cyffredinol a lefel uchel modelau pensaernïol . Gall datblygwyr weithredu'r patrymau hyn mewn bron unrhyw iaith. Yn wahanol i batrymau eraill, gellir eu defnyddio i ddylunio pensaernïaeth cais cyfan.

Ar ben hynny, gellir dosbarthu pob model yn ôl eu ceisio neu bwrpas. Y tri phrif ddosbarth yw:

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.
  • Modelau creadigol maent yn darparu mecanweithiau creu gwrthrychau sy'n cynyddu hyblygrwydd ac ailddefnyddio cod presennol.
  • Modelau strwythurol esboniant sut i gydosod gwrthrychau a dosbarthiadau i strwythurau mwy, gan gadw'r strwythurau hyn yn hyblyg ac effeithlon.
  • Modelau ymddygiadol maent yn ymdrin â chyfathrebu effeithiol ac aseinio cyfrifoldebau rhwng gwrthrychau.

Enghraifft o Patrwm Dylunio yn Laravel: Ffasâd

Facade yn batrwm dylunio strwythurol sy'n darparu rhyngwyneb symlach i lyfrgell, fframwaith, neu unrhyw set gymhleth arall o ddosbarthiadau.

Problem

Gadewch i ni dybio bod angen i ni wneud i feddalwedd weithio, yn seiliedig ar set fawr o wrthrychau sy'n perthyn i lyfrgell neu fframwaith soffistigedig. Fel rheol, byddai angen i ni gychwyn yr holl wrthrychau hyn, cadw golwg ar ddibyniaethau, gweithredu dulliau yn y drefn gywir, ac ati.

O ganlyniad, byddai rhesymeg busnes y dosbarthiadau yn cael eu cysylltu'n dynn â manylion gweithredu dosbarthiadau trydydd parti, gan eu gwneud yn anodd eu deall a'u rheoli.

Datrysiad

a facade yn ddosbarth sy'n darparu rhyngwyneb syml i is-system gymhleth sy'n cynnwys llawer o rannau symudol. A facade gall ddarparu ymarferoldeb cyfyngedig o gymharu â gweithio'n uniongyrchol gyda'r is-system. Fodd bynnag, dim ond y nodweddion y mae cwsmeriaid yn poeni amdanynt mewn gwirionedd y mae'n eu cynnwys.

Cael un facade mae'n ddefnyddiol pan fydd angen i ni integreiddio'r app â llyfrgell soffistigedig sydd â dwsinau o nodweddion, ond dim ond rhan fach o'i ymarferoldeb sydd ei angen arnom.

Er enghraifft, gallai ap sy'n uwchlwytho fideos doniol byr gyda chathod i gyfryngau cymdeithasol o bosibl ddefnyddio llyfrgell trosi fideos proffesiynol. Fodd bynnag, y cyfan sydd ei angen arnom mewn gwirionedd yw dosbarth gyda'r un dull encode(filename, format). Ar ôl creu dosbarth o'r fath a'i gysylltu â'r llyfrgell trosi fideo, bydd gennym ein un cyntaf facade.

Er enghraifft, mae gweithredwr ffôn canolfan alwadau fel a facade. Mewn gwirionedd, pan fyddwn yn galw gwasanaeth ffôn siop i osod archeb ffôn, ni yw gweithredwr facade tuag at holl wasanaethau ac adrannau'r siop. Mae'r gweithredwr yn darparu rhyngwyneb llais syml i'r system archebu, pyrth talu a gwasanaethau dosbarthu amrywiol.

Enghraifft go iawn yn PHP

Meddyliwch am Facade fel addasydd syml ar gyfer rhai is-systemau cymhleth. Facade yn ynysu'r cymhlethdod o fewn un dosbarth ac yn caniatáu i god cymhwysiad arall ddefnyddio'r rhyngwyneb syml.

Yn yr enghraifft hon, Facade yn cuddio cymhlethdod y llyfrgell YouTube API a FFmpeg o'r cod cleient. Yn hytrach na gweithio gyda dwsinau o ddosbarthiadau, mae'r cleient yn defnyddio dull syml ar 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

Cylchlythyr arloesi
Peidiwch â cholli'r newyddion pwysicaf am arloesi. Cofrestrwch i'w derbyn trwy e-bost.

Erthyglau Diweddar

Mae Veeam yn cynnwys y gefnogaeth fwyaf cynhwysfawr ar gyfer ransomware, o amddiffyniad i ymateb ac adferiad

Bydd Coveware gan Veeam yn parhau i ddarparu gwasanaethau ymateb i ddigwyddiadau cribddeiliaeth seiber. Bydd Coveware yn cynnig galluoedd fforensig ac adfer…

23 2024 Ebrill

Chwyldro Gwyrdd a Digidol: Sut Mae Cynnal a Chadw Rhagfynegol yn Trawsnewid y Diwydiant Olew a Nwy

Mae gwaith cynnal a chadw rhagfynegol yn chwyldroi'r sector olew a nwy, gyda dull arloesol a rhagweithiol o reoli planhigion.…

22 2024 Ebrill

Rheoleiddiwr antitrust y DU yn codi larwm BigTech dros GenAI

Mae CMA y DU wedi cyhoeddi rhybudd am ymddygiad Big Tech yn y farchnad deallusrwydd artiffisial. Yno…

18 2024 Ebrill

Casa Green: chwyldro ynni ar gyfer dyfodol cynaliadwy yn yr Eidal

Mae'r Archddyfarniad "Achos Gwyrdd", a luniwyd gan yr Undeb Ewropeaidd i wella effeithlonrwydd ynni adeiladau, wedi dod â'i broses ddeddfwriaethol i ben gyda…

18 2024 Ebrill