Artikel

Naon pola desain: naha nganggo aranjeunna, klasifikasi, pro sareng kontra

Dina rékayasa parangkat lunak, pola desain mangrupikeun solusi optimal pikeun masalah anu umumna lumangsung dina desain parangkat lunak.

Aranjeunna sapertos preproyékdefinite, alat diusahakeun tur dites nu bisa Anjeun ngaropea pikeun ngajawab masalah desain ngulang dina kode Anjeun.

Perkiraan waktos maca: 6 menit

Naon Pola Desain

Pola desain sanes kode anu tiasa urang salin sareng selapkeun kana program urang, sapertos anu tiasa urang laksanakeun sareng fungsi atanapi perpustakaan standar. Pola desain mangrupa konsép umum anu mampuh ngaréngsékeun masalah anu tangtu. Dasarna modél anu rinci anu tiasa urang tuturkeun sareng ngalaksanakeun solusi anu cocog sareng kanyataan program urang.

Model mindeng bingung jeung algoritma, sabab duanana konsép ngajelaskeun solusi has pikeun sababaraha masalah dipikawanoh. Sedengkeun hiji algoritma defiLamun sok aya sakumpulan tindakan anu jelas anu tiasa ngahontal tujuan anu tangtu, modél mangrupikeun pedaran tingkat anu langkung luhur pikeun solusi. Kodeu tina model anu sarua dilarapkeun ka dua program béda bisa jadi béda.

Hoyong ngadamel analogi, urang tiasa mikirkeun resep masak: duanana gaduh léngkah anu jelas pikeun ngahontal tujuan. Sanajan kitu, model leuwih kawas proyék, nu bisa ningali naon hasilna tur ciri na, tapi urutan pasti palaksanaan gumantung kana urang nu nulis kode.

Naon Pola Desain Didamel tina?

Kaseueuran pola dijelaskeun sacara formal pisan ku kituna masarakat tiasa ngahasilkeun deui dina seueur kontéks. Hayu urang tingali di handap unsur-unsur anu aya dina pedaran model:

  • Niat tina model sakeudeung ngajelaskeun duanana masalah jeung solusi.
  • Motivasina salajengna ngécéskeun masalah jeung solusi nu model ngajadikeun mungkin.
  • Struktur tina kelas nunjukkeun unggal bagian tina modél sareng kumaha hubunganana.
  • Contona kode dina salah sahiji basa pamrograman anu pang populerna ngagampangkeun ngartos ideu di balik modél éta.

Naha make aranjeunna?

Programmer tiasa ngembangkeun software tanpa terang ayana pola desain. Loba ngalakukeun, jeung alesan ieu aranjeunna nerapkeun sababaraha schemes tanpa nyaho eta. Tapi naha urang kudu méakkeun waktu diajar aranjeunna?

  • Pola desain mangrupikeun sakumpulan solusi diusahakeun tur dites masalah umum dina desain software. Sanaos anjeun henteu kantos mendakan masalah ieu, terang pola masih mangpaat sabab ngajarkeun anjeun kumaha ngarengsekeun sagala jinis masalah nganggo prinsip desain berorientasi obyék.
  • Modél desain defiAranjeunna nyiptakeun basa umum anu tiasa dianggo ku anjeun sareng tim anjeun pikeun komunikasi langkung efektif. Anjeun tiasa nyarios, "Oh, nganggo Singleton pikeun ngalakukeun ieu," sareng sadayana bakal ngartos ideu dibalik saran anjeun. Teu perlu ngajelaskeun naon singleton a lamun nyaho pola na ngaranna.

Klasifikasi Pola Desain

Pola desain béda dina pajeulitna, tingkat detil, sareng skala panerapan sapanjang sistem anu dirancang.

Ku analogi, urang tiasa ngadamel simpang langkung aman ku cara masang sababaraha lampu lalu lintas atanapi ngawangun sadayana silih bertingkat sareng jalur bawah tanah pikeun pejalan kaki.

Paling dasar, model-tingkat low mindeng disebut idiom . Aranjeunna biasana ngan dilarapkeun ka hiji basa programming.

Model anu paling universal sareng tingkat luhur nyaéta model arsitéktur . Pamekar tiasa nerapkeun pola ieu dina ampir sagala basa. Beda sareng pola anu sanés, aranjeunna tiasa dianggo pikeun ngararancang arsitéktur tina sakabéh aplikasi.

Saterusna, sagala model bisa digolongkeun nurutkeun maranéhanana diusahakeun atawa tujuan. Tilu kelas utama nyaéta:

newsletter inovasi
Entong luput warta anu paling penting ngeunaan inovasi. Ngadaptar pikeun nampa aranjeunna ku email.
  • Modél kreasi aranjeunna nyadiakeun mékanisme kreasi obyék nu ngaronjatkeun kalenturan sarta pamakéan deui kode aya.
  • Modél struktural aranjeunna ngajelaskeun kumaha carana ngumpul objék jeung kelas kana struktur nu leuwih gede, ngajaga struktur ieu fléksibel tur efisien.
  • Modél kabiasaan aranjeunna nungkulan komunikasi éféktif jeung ngerjakeun tanggung jawab antara objék.

Conto Pola Desain dina Laravel: Fasad

Fasade mangrupa pola desain struktural nu nyadiakeun antarbeungeut saderhana ka perpustakaan, kerangka, atawa set kompléks séjén tina kelas.

masalah

Hayu urang nganggap urang kudu nyieun karya software, dumasar kana susunan badag objék nu milik perpustakaan canggih atawa kerangka. Biasana, urang kedah ngamimitian sadayana obyék ieu, ngalacak katergantungan, ngalaksanakeun metode dina urutan anu leres, sareng saterasna.

Hasilna, logika bisnis kelas-kelas bakal jadi gandeng pageuh kana detil palaksanaan kelas pihak katilu, sahingga hésé ngarti tur ngatur.

Solusi

Una facade mangrupakeun kelas nu nyadiakeun panganteur basajan ka subsistem kompléks nu ngandung loba bagian pindah. A facade bisa nyadiakeun pungsionalitas kawates dibandingkeun gawé langsung jeung subsistem. Nanging, éta ngan ukur kalebet fitur anu leres-leres dipikanyaah ku para nasabah.

Gaduh hiji facade Éta mangpaat nalika urang kedah ngahijikeun aplikasi sareng perpustakaan canggih anu ngagaduhan puluhan fitur, tapi urang ngan ukur peryogi sabagian leutik fungsionalitasna.

Contona, hiji aplikasi nu unggah video lucu pondok nampilkeun ucing ka média sosial berpotensi ngagunakeun perpustakaan konversi video profésional. Nanging, sadayana anu urang peryogikeun nyaéta kelas kalayan metode tunggal encode(filename, format). Saatos nyiptakeun kelas sapertos kitu sareng nyambungkeun kana perpustakaan konvérsi pidéo, urang bakal ngagaduhan anu munggaran facade.

Contona, operator telepon call center kawas a facade. Nyatana, nalika urang nelepon ka layanan telepon toko pikeun nempatkeun pesenan telepon, operator mangrupikeun milik urang facade nuju sadaya jasa sareng departemén toko. Operator nyadiakeun antarbeungeut sora basajan kana sistem pesenan, gateways pamayaran jeung sagala rupa layanan pangiriman.

Conto nyata dina PHP

Pikirkeun Fasade salaku adaptor basajan pikeun sababaraha subsistem kompléks. Facade ngasingkeun pajeulitna dina hiji kelas tunggal tur ngamungkinkeun kode aplikasi sejenna ngagunakeun panganteur basajan.

Dina conto ieu, Facade nyumput pajeulitna API YouTube jeung perpustakaan FFmpeg tina kode klien. Gantina gawé bareng puluhan kelas, klien ngagunakeun métode basajan on 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

newsletter inovasi
Entong luput warta anu paling penting ngeunaan inovasi. Ngadaptar pikeun nampa aranjeunna ku email.

Artikel panganyarna

Veeam nampilkeun dukungan anu paling komprehensif pikeun ransomware, tina panyalindungan dugi ka réspon sareng pamulihan

Coveware ku Veeam bakal terus nyayogikeun jasa réspon kajadian cyber extortion. Coveware bakal nawiskeun kamampuan forensik sareng remediasi…

April 23 2024

Révolusi Héjo sareng Digital: Kumaha Pangropéa Prediktif Ngarobih Industri Minyak & Gas

Pangropéa prediktif ngarévolusi sektor minyak & gas, kalayan pendekatan inovatif sareng proaktif pikeun ngokolakeun pabrik.…

April 22 2024

Regulator antitrust Inggris naékkeun alarem BigTech pikeun GenAI

CMA Inggris parantos ngaluarkeun peringatan ngeunaan paripolah Big Tech di pasar intelijen buatan. Tuh…

April 18 2024

Casa Green: revolusi énergi pikeun masa depan sustainable di Italia

Kaputusan "Imah Héjo", dirumuskeun ku Uni Éropa pikeun ningkatkeun efisiensi énergi gedong, parantos nyimpulkeun prosés législatifna sareng…

April 18 2024