Zimanî babet

Nimûneyên sêwiranê çi ne: çima wan bikar tînin, dabeşkirin, erênî û neyînî

Di endezyariya nermalavê de, qalibên sêwiranê ji pirsgirêkên ku bi gelemperî di sêwirana nermalavê de çêdibin çareseriyên çêtirîn in.

Ew mîna projeyên pêşîn indefinite, amûrên ceribandin û ceribandin ku hûn dikarin xweş bikin da ku di koda xwe de pirsgirêkek sêwirana dubare çareser bikin.

Dema xwendinê ya texmînkirî: 6 minuti

Modela sêwiranê çi ye

Nimûneya sêwiranê ne kodek e ku em dikarin kopî bikin û têxin nav bernameya xwe, wekî ku em dikarin bi fonksiyonên standard an pirtûkxane re bikin. Nimûneya sêwiranê têgehek gelemperî ye ku dikare pirsgirêkek taybetî çareser bike. Di esasê xwe de modelek ku hûrguliyên wê em dikarin bişopînin û çareseriyek ku li gorî rastiya bernameya me be bicîh bînin.

Model bi gelemperî bi algorîtmayan re têne tevlihev kirin, ji ber ku her du têgeh çareseriyên tîpîk ên hin pirsgirêkên naskirî diyar dikin. Dema ku algorîtmayek defiGer her gav komek zelal a çalakiyan hebe ku dikare armancek diyarkirî bigihîje, modelek ravekek asta bilind a çareseriyê ye. Koda ji heman modelê ku ji du bernameyên cûda re hatî sepandin dibe ku cûda be.

Dixwazin ku em analojiyek çêbikin, em dikarin li ser reçeteyek çêkirina xwarinê bifikirin: her du jî gavên zelal hene ku bigihîjin armancekê. Lêbelê, modelek bêtir mîna projeyek e, ku hûn dikarin bibînin ka encam û taybetmendiyên wê çi ne, lê rêza rast a bicîhkirinê bi me ve girêdayî ye ku kodê dinivîse.

Modela sêwiranê ji çi hatî çêkirin?

Piraniya şêweyan pir bi fermî têne vegotin da ku mirov bikaribe wan di gelek mijaran de ji nû ve hilberîne. Ka em li jêr hêmanên ku di danasîna modelekê de hene bibînin:

  • Niyeta ya modelê bi kurtî hem pirsgirêkê û hem jî çareseriyê vedibêje.
  • Motivasyon bêtir pirsgirêk û çareseriya ku modêl dike rave dike.
  • Awayî çînên her parçeyek modelê û çawa ew bi hev ve girêdayî nîşan dide.
  • Mînaka kodê di yek ji zimanên bernamesaziyê yên herî populer de famkirina ramana li pişt modelê hêsantir dike.

Çima wan bikar bînin?

Bernamesazek ​​dikare nermalavê pêş bixe bêyî ku zanibe hebûna şêweyên sêwiranê. Pir kes dikin, û ji ber vê yekê ew bêyî ku bizanibin hin plansaziyan pêk tînin. Lê nexwe çima divê em wextê xwe bidin hînbûna wan?

  • Nimûneyên sêwirînê kîtek in çareseriyên ceribandin û ceribandin pirsgirêkên hevpar ên di sêwirana nermalavê de. Tewra ku hûn çu carî bi van pirsgirêkan re rû bi rû nebin, zanîna nimûneyan hîn jî bikêr e ji ber ku ew fêrî we dike ka meriv çawa bi karanîna prensîbên sêwirana objekt-oriented her cûre pirsgirêkan çareser dike.
  • Modelên sêwiranê defiEw zimanek hevpar diafirînin ku hûn û tîmê we dikarin bikar bînin da ku bi bandortir ragihînin. Hûn dikarin bêjin, "Oh, tenê Singleton bikar bînin ku vê yekê bikin," û her kes dê fikra li pişt pêşniyara we fam bike. Ne hewce ye ku hûn rave bikin ka yekcar çi ye heke hûn nimûne û navê wê zanibin.

Dabeşkirina şêweyên sêwiranê

Nimûneyên sêwiranê di tevlihevî, asta hûrguliyê, û pîvana sepandinê de li seranserê pergala sêwirandî cûda dibin.

Bi analogê, em dikarin bi sazkirina çend roniyên trafîkê an jî avakirina tevahiyek pir-astî bi rêgehên jêrzemînê yên ji bo peyayan, xaçerêyek ewledartir bikin.

Modelên herî bingehîn, kêm-asta pir caran têne gotin biwêjên . Ew bi gelemperî tenê ji bo zimanek bernameyek yekane bicîh dikin.

Modelên herî gerdûnî û bilind in modelên mîmarî . Pêşdebir dikarin van şêweyan hema hema bi her zimanî bicîh bikin. Berevajî qalibên din, ew dikarin ji bo sêwirana mîmariya serîlêdanek tevahî werin bikar anîn.

Wekî din, hemî model dikarin li gorî wan werin dabeş kirin niyet an armanc. Sê çînên sereke ev in:

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.
  • Modelên afirandinê ew mekanîzmayên afirandina tiştan peyda dikin ku nermbûn û ji nû ve karanîna koda heyî zêde dikin.
  • Modelên strukturel ew rave dikin ka meriv çawa tiştan û çînan di nav strukturên mezintir de berhev dike, van avahiyan nerm û bikêr dihêlin.
  • Modelên Behavioral ew bi danûstendina bi bandor û peywira berpirsiyariyan di navbera tiştan de mijûl dibin.

Mînaka Modela sêwiranê li Laravel: Facade

facade şêweyek sêwirana strukturel e ku navbeynek sadekirî ji pirtûkxaneyek, çarçoveyek, an komek din a çînên tevlihev re peyda dike.

Pirsgirêk

Ka em bifikirin ku pêdivî ye ku em nermalavê bixebitin, li ser bingeha komek mezin a tiştên ku girêdayî pirtûkxaneyek an çarçoveyek sofîstîke ne. Bi gelemperî, em hewce ne ku van hemî tiştan dest pê bikin, girêdanan bişopînin, rêbazan di rêza rast de bicîh bikin, û hwd.

Wekî encamek, mantiqa karsaziya dersan dê bi hûrguliyên pêkanîna dersên sêyemîn re hişk were girêdan, ku fêmkirin û birêvebirina wan dijwar dike.

Çare

Una facade çînek e ku navgînek hêsan ji binepergalek tevlihev re ku gelek beşên tevgerî vedihewîne peyda dike. YEK facade dibe ku li gorî xebata rasterast bi bine pergalê re fonksiyonek tixûbdar peyda bike. Lêbelê, ew tenê taybetmendiyên ku xerîdar bi rastî lê eleqedar dibin vedihewîne.

Yek hebe facade ew bikêr e dema ku pêdivî ye ku em sepanê bi pirtûkxaneyek sofîstîke ya ku bi dehan taybetmendî lê hene yek bikin, lê em tenê beşek piçûk ji fonksiyona wê hewce ne.

Mînakî, serîlêdanek ku vîdyoyên kurt ên kêfê yên bi pisîkan re li ser medyaya civakî bar dike dikare bi potansiyel pirtûkxaneyek veguheztina vîdyoyê ya profesyonel bikar bîne. Lêbelê, ya ku em bi rastî hewce ne pola bi rêbazek yekane ye encode(filename, format). Piştî afirandina çînek wusa û girêdana wê bi pirtûkxaneya veguheztina vîdyoyê re, em ê yekema xwe hebin facade.

Mînakî, operatora telefonê ya navendek bangê mîna a facade. Bi rastî, gava ku em bangî karûbarê têlefonê dikanek dikin da ku fermanek têlefonê bidin, operatorek ya me ye facade ber bi hemû karûbar û beşên dikanê. Operator navgînek dengek hêsan a pergala fermankirinê, dergehên dravdanê û karûbarên radestkirinê yên cihêreng peyda dike.

Mînaka rastîn di PHP de

Bifikirin facade wekî adapterek hêsan ji bo hin bine pergalên tevlihev. Facade tevliheviyê di nav yek polê de veqetîne û destûrê dide koda serîlêdana din ku pêwendiya hêsan bikar bîne.

Di vê nimûneyê de, Facade tevliheviya pirtûkxaneya YouTube API û FFmpeg ji koda xerîdar vedişêre. Li şûna ku bi dehan dersan re bixebite, xerîdar li ser Facade rêbazek hêsan bikar tîne.

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

nûçenameya Innovation
Nûçeyên herî girîng ên li ser nûjeniyê ji bîr nekin. Sign up ji bo wergirtina wan bi e-nameyê.

Gotarên dawî

Veeam ji parastinê bigire heya bersiv û başbûnê ji bo ransomware piştgirîya herî berfireh vedihewîne

Coveware ji hêla Veeam ve dê berdewam bike ku karûbarên bersivdayina bûyera xerckirina sîber peyda bike. Coveware dê kapasîteyên dadwerî û sererastkirinê pêşkêşî bike…

23 Nîsana 2024

Şoreşa Kesk û Dîjîtal: Ma Maintenance Pêşbînîdar Pîşesaziya Neft û Gazê Veguherîne Çawa

Lênêrîna pêşbînîkirî di sektora neft û gazê de, bi nêzîkatiyek nûjen û çalak a rêveberiya nebatê şoreşek dike.…

22 Nîsana 2024

Rêkûpêk antîtrust a Keyaniya Yekbûyî alarma BigTech li ser GenAI radike

CMA ya Keyaniya Yekbûyî di derbarê reftarên Big Tech de di bazara îstîxbarata çêkirî de hişyariyek derxist. Va…

18 Nîsana 2024

Casa Green: şoreşa enerjiyê ji bo pêşerojek domdar li Italytalyayê

Biryarnameya "Xalên Kesk", ku ji hêla Yekîtiya Ewropî ve ji bo zêdekirina karbidestiya enerjiyê ya avahiyan hatî damezrandin, pêvajoya xwe ya qanûnî bi…

18 Nîsana 2024