makala

Je, ni mifumo ya kubuni: kwa nini matumizi yao, uainishaji, faida na hasara

Katika uhandisi wa programu, muundo wa muundo ni suluhisho bora kwa shida zinazotokea kwa kawaida katika muundo wa programu.

Wao ni kama miradi ya awalidefinite, zana zilizojaribiwa ambazo unaweza kubinafsisha ili kutatua tatizo la muundo linalojirudia katika msimbo wako.

Muda uliokadiriwa wa kusoma: 6 minuti

Muundo wa Kubuni ni nini

Mchoro wa muundo sio msimbo ambao tunaweza kunakili na kuingiza kwenye programu yetu, kama tunavyoweza kufanya na vitendakazi au maktaba za kawaida. Mchoro wa kubuni ni dhana ya jumla yenye uwezo wa kutatua tatizo fulani. Kimsingi ni mfano ambao maelezo yake tunaweza kufuata na kutekeleza suluhisho linalolingana na ukweli wa programu yetu.

Mifano mara nyingi huchanganyikiwa na algorithms, kwa sababu dhana zote mbili zinaelezea ufumbuzi wa kawaida kwa matatizo fulani yanayojulikana. Wakati algorithm defiIkiwa daima kuna seti ya wazi ya vitendo ambayo inaweza kufikia lengo fulani, mfano ni maelezo ya kiwango cha juu cha suluhisho. Msimbo kutoka kwa mfano sawa unaotumika kwa programu mbili tofauti unaweza kuwa tofauti.

Tunataka kufanya mlinganisho, tunaweza kufikiria kichocheo cha kupikia: wote wana hatua wazi za kufikia lengo. Walakini, mfano ni kama mradi, ambao unaweza kuona matokeo na sifa zake ni nini, lakini mpangilio halisi wa utekelezaji unategemea sisi tunaoandika nambari.

Muundo wa Kubuni umetengenezwa na nini?

Mifumo mingi imeelezewa rasmi sana ili watu waweze kuizalisha tena katika miktadha mingi. Wacha tuone hapa chini vitu ambavyo vipo katika maelezo ya mfano:

  • Nia ya mfano inaelezea kwa ufupi shida na suluhisho.
  • Hamasa inaelezea zaidi shida na suluhisho ambalo mfano hufanya iwezekanavyo.
  • Muundo ya madarasa inaonyesha kila sehemu ya modeli na jinsi zinavyohusiana.
  • Mfano wa kanuni katika moja ya lugha maarufu za programu hurahisisha kuelewa wazo nyuma ya modeli.

Kwa nini kuzitumia?

Mpangaji programu anaweza kutengeneza programu bila kujua uwepo wa muundo wa muundo. Wengi hufanya hivyo, na kwa sababu hii wanatekeleza mipango fulani bila kujua. Lakini basi kwa nini tunapaswa kutumia wakati kuzijifunza?

  • Miundo ya kubuni ni kit ya walijaribu na kupimwa suluhisho kwa shida za kawaida katika muundo wa programu. Hata kama hutawahi kukutana na matatizo haya, kujua ruwaza bado ni muhimu kwa sababu inakufundisha jinsi ya kutatua kila aina ya matatizo kwa kutumia kanuni za muundo unaolenga kitu.
  • Mifano ya kubuni defiWanaunda lugha ya kawaida ambayo wewe na timu yako mnaweza kutumia kuwasiliana kwa ufanisi zaidi. Unaweza kusema, "Lo, tumia tu Singleton kufanya hivi," na kila mtu ataelewa wazo la pendekezo lako. Hakuna haja ya kueleza singleton ni nini ikiwa unajua muundo na jina lake.

Uainishaji wa Miundo ya Kubuni

Miundo ya muundo hutofautiana katika uchangamano, kiwango cha undani, na ukubwa wa utumiaji katika mfumo wote ulioundwa.

Kwa mlinganisho, tunaweza kufanya makutano kuwa salama zaidi kwa kusakinisha taa chache za trafiki au kujenga makutano yote ya ngazi mbalimbali na njia za chini ya ardhi kwa watembea kwa miguu.

Mifano ya msingi zaidi, ya kiwango cha chini huitwa mara nyingi nahau . Kawaida hutumika tu kwa lugha moja ya programu.

Mifano ya ulimwengu wote na ya juu ni mifano ya usanifu . Wasanidi wanaweza kutekeleza ruwaza hizi katika takriban lugha yoyote. Tofauti na mifumo mingine, inaweza kutumika kutengeneza usanifu wa programu nzima.

Zaidi ya hayo, mifano yote inaweza kuainishwa kulingana na yao alijaribu au kusudi. Madarasa makuu matatu ni:

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.
  • Mifano ya ubunifu wanatoa mbinu za kuunda kitu ambazo huongeza unyumbufu na utumiaji tena wa msimbo uliopo.
  • Mifano ya miundo wanaelezea jinsi ya kukusanya vitu na madarasa katika miundo mikubwa, kuweka miundo hii rahisi na yenye ufanisi.
  • Mifano ya tabia wanashughulikia mawasiliano madhubuti na ugawaji wa majukumu kati ya vitu.

Mfano wa muundo wa muundo katika Laravel: uso

Fadi ni muundo wa muundo ambao hutoa kiolesura kilichorahisishwa kwa maktaba, mfumo, au seti nyingine yoyote changamano ya madarasa.

tatizo

Hebu tuchukulie tunahitaji kufanya programu kufanya kazi, kulingana na seti kubwa ya vitu ambavyo ni vya maktaba ya kisasa au mfumo. Kwa kawaida, tungehitaji kuanzisha vitu hivi vyote, kufuatilia utegemezi, kutekeleza mbinu kwa mpangilio sahihi, na kadhalika.

Kwa hivyo, mantiki ya biashara ya madarasa ingeunganishwa kwa uthabiti na maelezo ya utekelezaji wa madarasa ya wahusika wengine, na kuyafanya kuwa magumu kuelewa na kudhibiti.

Suluhisho

a facade ni darasa ambalo hutoa kiolesura rahisi kwa mfumo mdogo ambao una sehemu nyingi zinazosonga. A facade inaweza kutoa utendakazi mdogo ikilinganishwa na kufanya kazi moja kwa moja na mfumo mdogo. Walakini, inajumuisha tu vipengele ambavyo wateja wanajali sana.

Kuwa na moja facade ni muhimu tunapohitaji kuunganisha programu na maktaba ya kisasa ambayo ina vipengele vingi, lakini tunahitaji tu sehemu ndogo ya utendaji wake.

Kwa mfano, programu inayopakia video fupi za kuchekesha zinazoangazia paka kwenye mitandao jamii inaweza kutumia maktaba ya kitaalamu ya kugeuza video. Walakini, tunachohitaji sana ni darasa na njia moja encode(filename, format). Baada ya kuunda darasa kama hilo na kuiunganisha kwenye maktaba ya ubadilishaji wa video, tutakuwa na ya kwanza facade.

Kwa mfano, opereta wa simu wa kituo cha simu ni kama a facade. Kwa kweli, tunapoita huduma ya simu ya duka ili kuweka agizo la simu, opereta ni yetu facade kuelekea huduma zote na idara za duka. Opereta hutoa interface rahisi ya sauti kwa mfumo wa kuagiza, lango la malipo na huduma mbalimbali za utoaji.

Mfano halisi katika PHP

Fikiria kuhusu Fadi kama adapta rahisi kwa mifumo midogo midogo. Facade hutenganisha utata ndani ya darasa moja na inaruhusu msimbo mwingine wa programu kutumia kiolesura rahisi.

Katika mfano huu, Facade huficha utata wa API ya YouTube na maktaba ya FFmpeg kutoka kwa msimbo wa mteja. Badala ya kufanya kazi na madarasa kadhaa, mteja hutumia njia rahisi kwenye 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

Jarida la uvumbuzi
Usikose habari muhimu zaidi kuhusu uvumbuzi. Jisajili ili kuzipokea kwa barua pepe.

Makala ya hivi karibuni

Veeam inaangazia usaidizi wa kina zaidi wa ransomware, kutoka kwa ulinzi hadi majibu na uokoaji

Coveware by Veeam itaendelea kutoa huduma za kukabiliana na matukio ya ulaghai mtandaoni. Coveware itatoa uwezo wa uchunguzi na urekebishaji…

Aprili 23 2024

Mapinduzi ya Kijani na Kidijitali: Jinsi Matengenezo Yanayotabirika yanavyobadilisha Sekta ya Mafuta na Gesi

Matengenezo ya kitabiri yanaleta mapinduzi katika sekta ya mafuta na gesi, kwa mbinu bunifu na makini ya usimamizi wa mitambo.…

Aprili 22 2024

Kidhibiti cha kutokuaminika cha Uingereza kinainua kengele ya BigTech kupitia GenAI

CMA ya Uingereza imetoa onyo kuhusu tabia ya Big Tech katika soko la kijasusi bandia. Hapo...

Aprili 18 2024

Casa Green: mapinduzi ya nishati kwa mustakabali endelevu nchini Italia

Amri ya "Nyumba za Kijani", iliyoundwa na Umoja wa Ulaya ili kuongeza ufanisi wa nishati ya majengo, imehitimisha mchakato wake wa kutunga sheria na…

Aprili 18 2024