Atik

Ki sa ki modèl konsepsyon: poukisa sèvi ak yo, klasifikasyon, avantaj ak dezavantaj

Nan jeni lojisyèl, modèl konsepsyon yo se solisyon optimal nan pwoblèm ki souvan rive nan konsepsyon lojisyèl.

Yo se tankou pre pwojèdefiNouvo zouti ki te eseye ak teste ke ou ka pèsonalize pou rezoud yon pwoblèm konsepsyon renouvlab nan kòd ou a.

Estimasyon tan lekti: 6 minit

Ki sa ki se yon modèl konsepsyon

Yon modèl konsepsyon se pa kòd ke nou ka kopye epi mete nan pwogram nou an, menm jan nou ka fè ak fonksyon estanda oswa bibliyotèk. Modèl konsepsyon an se yon konsèp jeneral ki kapab rezoud yon pwoblèm patikilye. Fondamantalman yon modèl ki gen detay nou ka swiv epi aplike yon solisyon ki anfòm reyalite a nan pwogram nou an.

Modèl yo souvan konfonn ak algoritm, paske tou de konsèp dekri solisyon tipik nan kèk pwoblèm li te ye. Pandan ke yon algorithm defiSi toujou gen yon seri aksyon klè ki ka reyalize yon sèten objektif, yon modèl se yon deskripsyon nivo ki pi wo nan yon solisyon. Kòd ki soti nan menm modèl aplike nan de pwogram diferan ka diferan.

Vle fè yon analoji, nou ka panse a yon resèt pou kwit manje: tou de gen etap klè pou reyalize yon objektif. Sepandan, yon modèl se plis tankou yon pwojè, nan ki ou ka wè ki rezilta a ak karakteristik li yo, men lòd egzak la nan aplikasyon depann sou nou ki ekri kòd la.

Ki sa ki se yon modèl konsepsyon te fè?

Pifò modèl yo dekri trè fòmèlman pou moun ka repwodui yo nan anpil kontèks. Ann wè pi ba a eleman ki prezan nan deskripsyon yon modèl:

  • Entansyon an nan modèl la dekri yon ti tan tou de pwoblèm nan ak solisyon an.
  • Motivasyon an plis eksplike pwoblèm nan ak solisyon an ke modèl la fè posib.
  • Estrikti nan klas yo montre chak pati nan modèl la ak ki jan yo gen rapò.
  • Egzanp kòd la nan youn nan lang yo pwogramasyon ki pi popilè fè li pi fasil yo konprann lide ki dèyè modèl la.

Poukisa sèvi ak yo?

Yon pwogramè ka devlope lojisyèl san yo pa konnen egzistans modèl konsepsyon. Anpil fè sa, e pou rezon sa a yo aplike kèk rapid san yo pa konnen li. Men, poukisa nou ta dwe pase tan aprann yo?

  • Modèl konsepsyon yo se yon twous solisyon eseye ak teste pwoblèm komen nan konsepsyon lojisyèl. Menm si ou pa janm rankontre pwoblèm sa yo, konnen modèl toujou itil paske li anseye ou kijan pou rezoud tout kalite pwoblèm lè l sèvi avèk prensip konsepsyon objè oryante.
  • Modèl konsepsyon yo defiYo kreye yon lang komen ke ou menm ak ekip ou a ka itilize pou kominike pi efikasman. Ou ta ka di, "O, jis itilize yon Singleton pou fè sa," epi tout moun pral konprann lide ki dèyè sijesyon ou a. Pa gen okenn nesesite pou eksplike kisa yon singleton ye si ou konnen modèl la ak non li.

Klasifikasyon nan modèl konsepsyon

Modèl konsepsyon diferan nan konpleksite, nivo detay, ak echèl aplikasyon nan tout sistèm ki fèt la.

Pa analoji, nou ka rann yon entèseksyon pi an sekirite lè nou enstale kèk limyè trafik oswa bati yon echanj tout nivo ak pasaj anba tè pou pyeton yo.

Yo souvan rele modèl ki pi fondamantal, ki ba-nivo idiom . Anjeneral yo aplike sèlman nan yon sèl langaj pwogramasyon.

Modèl ki pi inivèsèl ak wo nivo yo se modèl achitekti . Devlopè yo ka aplike modèl sa yo nan prèske nenpòt lang. Kontrèman ak lòt modèl, yo ka itilize pou konsepsyon achitekti yon aplikasyon tout antye.

Anplis de sa, tout modèl yo ka klase dapre yo te eseye oswa objektif. Twa klas prensipal yo se:

Bilten inovasyon
Pa rate nouvèl ki pi enpòtan sou inovasyon. Enskri pou resevwa yo pa imel.
  • Modèl kreyatif yo bay mekanis kreyasyon objè ki ogmante fleksibilite ak reitilizasyon kòd ki egziste deja.
  • Modèl estriktirèl yo eksplike kijan pou rasanble objè ak klas yo nan pi gwo estrikti, kenbe estrikti sa yo fleksib ak efikas.
  • Modèl konpòtman yo fè fas ak kominikasyon efikas ak plasman nan responsablite ant objè yo.

Egzanp Design Pattern nan Laravel: Fasad

Fasad se yon modèl konsepsyon estriktirèl ki bay yon koòdone senplifye nan yon bibliyotèk, kad, oswa nenpòt lòt seri klas konplèks.

Pwoblèm

Ann sipoze nou bezwen fè lojisyèl travay, ki baze sou yon seri gwo objè ki fè pati yon bibliyotèk sofistike oswa kad. Nòmalman, nou ta bezwen inisyalize tout objè sa yo, kenbe tras nan depandans, egzekite metòd nan lòd ki kòrèk la, ak sou sa.

Kòm yon rezilta, lojik biznis la nan klas yo ta vin byen sere makonnen ak detay yo aplikasyon nan klas twazyèm pati, ki fè yo difisil pou konprann ak jere.

Solisyon

yon facade se yon klas ki bay yon koòdone senp nan yon subsistèm konplèks ki gen anpil pati k ap deplase. A facade ka bay fonksyonalite limite konpare ak travay dirèkteman ak subsistèm nan. Sepandan, li gen ladan sèlman karakteristik yo ke kliyan reyèlman pran swen sou.

Fè youn facade li itil lè nou bezwen entegre app a ak yon bibliyotèk sofistike ki gen plizyè douzèn karakteristik, men nou sèlman bezwen yon ti pati nan fonksyonalite li yo.

Pou egzanp, yon aplikasyon ki telechaje videyo kout komik ak chat nan medya sosyal ta ka potansyèlman itilize yon bibliyotèk pwofesyonèl konvèsyon videyo. Sepandan, tout sa nou reyèlman bezwen se yon klas ak metòd la sèl encode(filename, format). Apre kreye yon klas konsa ak konekte li nan bibliyotèk konvèsyon videyo a, nou pral gen premye nou an facade.

Pa egzanp, operatè telefòn yon sant apèl se tankou yon facade. Anfèt, lè nou rele sèvis telefòn yon magazen an pou fè yon lòd telefòn, yon operatè se pou nou facade nan direksyon pou tout sèvis ak depatman magazen an. Operatè a bay yon koòdone vwa senp nan sistèm lòd la, pòtay peman ak divès kalite sèvis livrezon.

Egzanp reyèl nan PHP

Panse sou Fasad kòm yon adaptè senp pou kèk subsistèm konplèks. Facade izole konpleksite nan yon klas sèl epi li pèmèt lòt kòd aplikasyon yo sèvi ak koòdone ki senp.

Nan egzanp sa a, Facade kache konpleksite API YouTube ak bibliyotèk FFmpeg nan kòd kliyan an. Olye pou yo travay ak plizyè douzèn klas, kliyan an sèvi ak yon metòd senp sou fasad.

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

Bilten inovasyon
Pa rate nouvèl ki pi enpòtan sou inovasyon. Enskri pou resevwa yo pa imel.

Recent Articles

Veeam prezante sipò ki pi konplè pou ransomware, soti nan pwoteksyon jiska repons ak rekiperasyon

Coveware by Veeam ap kontinye bay sèvis repons pou ensidan ekstòsyon sou cyber. Coveware pral ofri medsen legal ak kapasite ratrapaj ...

23 Avril 2024

Revolisyon vèt ak dijital: Ki jan antretyen prediksyon ap transfòme endistri lwil oliv ak gaz

Antretyen prediksyon ap revolisyone sektè lwil oliv ak gaz la, ak yon apwòch inovatè ak aktif nan jesyon plant yo.…

22 Avril 2024

Regilatè antitrust UK ogmante alam BigTech sou GenAI

UK CMA te bay yon avètisman sou konpòtman Big Tech nan mache entèlijans atifisyèl la. La…

18 Avril 2024

Casa Green: revolisyon enèji pou yon avni dirab nan peyi Itali

Dekrè "Case Green", ki te fòme pa Inyon Ewopeyen an pou amelyore efikasite enèji nan bilding yo, te konkli pwosesis lejislatif li yo ak...

18 Avril 2024