Artikkelit

Mitä ovat suunnittelumallit: miksi niitä käytetään, luokittelu, edut ja haitat

Ohjelmistosuunnittelussa suunnittelumallit ovat optimaalisia ratkaisuja ohjelmistosuunnittelussa yleisesti esiintyviin ongelmiin.

Ne ovat kuin esiprojektejadefiviimeiset, testatut työkalut, joita voit mukauttaa ratkaisemaan koodissasi toistuvan suunnitteluongelman.

Arvioitu lukuaika: 6 minuti

Mikä on suunnittelumalli

Suunnittelumalli ei ole koodia, jonka voimme kopioida ja lisätä ohjelmaomme, kuten voimme tehdä vakiofunktioiden tai kirjastojen kanssa. Suunnittelumalli on yleinen käsite, joka pystyy ratkaisemaan tietyn ongelman. Periaatteessa malli, jonka yksityiskohtia voimme seurata ja toteuttaa ohjelmamme todellisuutta vastaavan ratkaisun.

Mallit sekoitetaan usein algoritmeihin, koska molemmat käsitteet kuvaavat tyypillisiä ratkaisuja joihinkin tunnettuihin ongelmiin. Vaikka algoritmi defiJos aina on olemassa selkeä joukko toimia, joilla voidaan saavuttaa tietty tavoite, malli on korkeamman tason kuvaus ratkaisusta. Saman mallin koodi kahdessa eri ohjelmassa voi olla erilainen.

Haluttaessa tehdä vertaus, voimme ajatella ruoanlaittoreseptiä: molemmilla on selkeät askeleet tavoitteen saavuttamiseksi. Malli on kuitenkin enemmän kuin projekti, jonka tulos ja ominaisuudet näkee, mutta tarkka toteutusjärjestys riippuu meistä koodin kirjoittajista.

Mistä suunnittelukuvio on tehty?

Useimmat kuviot kuvataan hyvin muodollisesti, jotta ihmiset voivat toistaa ne monissa yhteyksissä. Katsotaanpa alla elementtejä, jotka ovat mallin kuvauksessa:

  • Tarkoitus mallissa kuvataan lyhyesti sekä ongelmaa että ratkaisua.
  • Motivaatio selittää tarkemmin ongelman ja ratkaisun, jonka malli mahdollistaa.
  • Rakenne luokista näyttää mallin jokaisen osan ja kuinka ne liittyvät toisiinsa.
  • Esimerkki koodista yhdellä suosituimmista ohjelmointikielistä helpottaa mallin idean ymmärtämistä.

Miksi käyttää niitä?

Ohjelmoija voi kehittää ohjelmistoja tietämättä suunnittelumallien olemassaolosta. Monet tekevät, ja tästä syystä he toteuttavat joitain suunnitelmia tietämättään. Mutta miksi meidän pitäisi sitten käyttää aikaa niiden oppimiseen?

  • Suunnittelukuviot ovat sarja kokeiltuja ratkaisuja ohjelmistosuunnittelun yleisiin ongelmiin. Vaikka et koskaan törmääkään näihin ongelmiin, kuvioiden tunteminen on silti hyödyllistä, koska se opettaa sinua ratkaisemaan kaikenlaisia ​​​​ongelmia oliopohjaisten suunnitteluperiaatteiden avulla.
  • Suunnittelumallit defiNe luovat yhteisen kielen, jonka avulla sinä ja tiimisi voitte kommunikoida tehokkaammin. Voisit sanoa: "Voi, käytä vain Singletonia tehdäksesi tämän", ja kaikki ymmärtävät ehdotuksesi taustalla olevan idean. Sinun ei tarvitse selittää, mikä singleton on, jos tiedät kuvion ja sen nimen.

Suunnittelukuvioiden luokittelu

Suunnittelumallit eroavat monimutkaisuuden, yksityiskohtaisuuden ja sovellettavuuden laajuuden suhteen koko suunnitellussa järjestelmässä.

Vastaavasti voimme tehdä risteyksestä turvallisemman asentamalla muutaman liikennevalon tai rakentamalla kokonaisen monitasoisen liittymän, jossa on maanalaisia ​​jalankulkijoiden käytäviä.

Usein kutsutaan yksinkertaisimpia, matalan tason malleja idiomit . Ne koskevat yleensä vain yhtä ohjelmointikieltä.

Yleisimmät ja korkean tason mallit ovat arkkitehtonisia malleja . Kehittäjät voivat toteuttaa nämä mallit käytännössä millä tahansa kielellä. Toisin kuin muita kuvioita, niitä voidaan käyttää koko sovelluksen arkkitehtuurin suunnitteluun.

Lisäksi kaikki mallit voidaan luokitella niiden mukaan Intento tai tarkoitus. Kolme pääluokkaa ovat:

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.
  • Luovia malleja ne tarjoavat objektin luomismekanismeja, jotka lisäävät joustavuutta ja olemassa olevan koodin uudelleenkäyttöä.
  • Rakenteelliset mallit he selittävät, kuinka objekteja ja luokkia voidaan koota suurempiin rakenteiksi pitäen nämä rakenteet joustavina ja tehokkaina.
  • Käyttäytymismallit ne käsittelevät tehokasta viestintää ja vastuiden jakamista objektien välillä.

Esimerkki suunnittelukuviosta Laravelissa: Julkisivu

Julkisivu on rakennesuunnittelumalli, joka tarjoaa yksinkertaistetun käyttöliittymän kirjastoon, kehykseen tai mihin tahansa muuhun monimutkaiseen luokkiin.

Ongelma

Oletetaan, että meidän on saatava ohjelmisto toimimaan suuren objektijoukon perusteella, jotka kuuluvat hienostuneeseen kirjastoon tai kehykseen. Normaalisti meidän pitäisi alustaa kaikki nämä objektit, seurata riippuvuuksia, suorittaa menetelmät oikeassa järjestyksessä ja niin edelleen.

Tämän seurauksena luokkien liiketoimintalogiikka kytkeytyisi tiukasti kolmansien osapuolien luokkien toteutusyksityiskohtiin, mikä tekisi niistä vaikea ymmärtää ja hallita.

Ratkaisu

Una facade on luokka, joka tarjoaa yksinkertaisen käyttöliittymän monimutkaiseen osajärjestelmään, joka sisältää monia liikkuvia osia. A facade voi tarjota rajoitettuja toimintoja verrattuna suoraan alijärjestelmän kanssa toimimiseen. Se sisältää kuitenkin vain ne ominaisuudet, joista asiakkaat todella välittävät.

Ota yksi facade se on hyödyllinen, kun meidän on integroitava sovellus kehittyneeseen kirjastoon, jossa on kymmeniä ominaisuuksia, mutta tarvitsemme vain pienen osan sen toiminnoista.

Esimerkiksi sovellus, joka lataa sosiaaliseen mediaan lyhyitä hauskoja videoita kissoista, voisi mahdollisesti käyttää ammattimaista videomuunnoskirjastoa. Tarvitsemme kuitenkin vain luokan yhdellä menetelmällä encode(filename, format). Kun olet luonut tällaisen luokan ja yhdistänyt sen videomuunnoskirjastoon, meillä on ensimmäinen facade.

Esimerkiksi puhelinkeskuksen puhelinoperaattori on kuin a facade. Itse asiassa, kun soitamme myymälän puhelinpalveluun tehdäksemme puhelintilauksen, operaattori on meidän facade myymälän kaikkiin palveluihin ja osastoihin. Operaattori tarjoaa yksinkertaisen puherajapinnan tilausjärjestelmään, maksuyhdyskäytäviin ja erilaisiin toimituspalveluihin.

Todellinen esimerkki PHP:ssä

Ajatella Julkisivu yksinkertaisena sovittimena monimutkaisille alajärjestelmille. Facade eristää monimutkaisuuden yhden luokan sisällä ja sallii muiden sovelluskoodien käyttää yksinkertaista käyttöliittymää.

Tässä esimerkissä Facade piilottaa YouTube-sovellusliittymän ja FFmpeg-kirjaston monimutkaisuuden asiakaskoodilta. Sen sijaan, että asiakas työskentelee kymmenien luokkien kanssa, hän käyttää yksinkertaista menetelmää Facadessa.

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

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.

Viimeaikaiset artikkelit

Veeam tarjoaa kattavimman tuen kiristysohjelmille suojauksesta vastaukseen ja palautukseen

Veeamin Coveware tarjoaa jatkossakin kyberkiristystapahtumien reagointipalveluita. Coveware tarjoaa rikosteknisiä ja korjaavia ominaisuuksia…

Huhtikuu 23 2024

Vihreä ja digitaalinen vallankumous: Kuinka ennakoiva huolto muuttaa öljy- ja kaasuteollisuutta

Ennakoiva huolto mullistaa öljy- ja kaasualan innovatiivisella ja ennakoivalla lähestymistavalla laitosten hallintaan.…

Huhtikuu 22 2024

Ison-Britannian kilpailuviranomainen herättää BigTech-hälytyksen GenAI:sta

Britannian CMA on antanut varoituksen Big Techin käyttäytymisestä tekoälymarkkinoilla. Siellä…

Huhtikuu 18 2024

Casa Green: energiavallankumous kestävän tulevaisuuden puolesta Italiassa

Euroopan unionin rakennusten energiatehokkuuden parantamiseksi laatima "Green Houses" -asetus on saanut lainsäädäntöprosessinsa päätökseen…

Huhtikuu 18 2024