Ħin tal-qari stmat: 6 minuta
Mudell tad-disinn mhuwiex kodiċi li nistgħu nikkopjah u ndaħħal fil-programm tagħna, kif nistgħu nagħmlu b'funzjonijiet jew libreriji standard. Il-mudell tad-disinn huwa kunċett ġenerali li kapaċi jsolvi problema partikolari. Bażikament mudell li d-dettalji tiegħu nistgħu nsegwu u nimplimentaw soluzzjoni li taqbel mar-realtà tal-programm tagħna.
Mudelli ħafna drabi huma konfużi ma 'algoritmi, għaliex iż-żewġ kunċetti jiddeskrivu soluzzjonijiet tipiċi għal xi problemi magħrufa. Filwaqt li algoritmu defiJekk dejjem ikun hemm sett ċar ta 'azzjonijiet li jistgħu jiksbu ċertu għan, mudell huwa deskrizzjoni ta' livell ogħla ta 'soluzzjoni. Kodiċi mill-istess mudell applikat għal żewġ programmi differenti jistgħu jkunu differenti.
Billi rridu nagħmlu analoġija, nistgħu naħsbu f'riċetta tat-tisjir: it-tnejn għandhom passi ċari biex jilħqu għan. Madankollu, mudell huwa aktar bħal proġett, li minnu tista 'tara x'inhuma r-riżultat u l-karatteristiċi tiegħu, iżda l-ordni eżatta tal-implimentazzjoni tiddependi minna li niktbu l-kodiċi.
Ħafna mudelli huma deskritti formalment ħafna sabiex in-nies ikunu jistgħu jirriproduċuhom f'ħafna kuntesti. Ejja naraw hawn taħt l-elementi li huma preżenti fid-deskrizzjoni ta 'mudell:
Programmatur jista 'jiżviluppa softwer mingħajr ma jkun jaf l-eżistenza ta' mudelli tad-disinn. Ħafna jagħmlu, u għal din ir-raġuni jimplimentaw xi skemi mingħajr ma jkunu jafu. Imma allura għala għandna nqattgħu ħin nitgħallmuhom?
Il-mudelli tad-disinn ivarjaw fil-kumplessità, fil-livell ta 'dettall, u fl-iskala ta' applikabilità matul is-sistema ddisinjata.
B'analoġija, nistgħu nagħmlu intersezzjoni aktar sigura billi ninstallaw ftit dwal tat-traffiku jew nibnu skambju sħiħ f'diversi livelli b'passaġġi taħt l-art għall-pedestrians.
L-aktar mudelli bażiċi, ta 'livell baxx ħafna drabi jissejħu idjomi . Normalment japplikaw biss għal lingwa ta' programmar waħda.
L-aktar mudelli universali u ta 'livell għoli huma mudelli arkitettoniċi . L-iżviluppaturi jistgħu jimplimentaw dawn il-mudelli prattikament fi kwalunkwe lingwa. B'differenza mudelli oħra, jistgħu jintużaw biex tiddisinja l-arkitettura ta 'applikazzjoni sħiħa.
Barra minn hekk, il-mudelli kollha jistgħu jiġu kklassifikati skond tagħhom ippruvat jew għan. It-tliet klassijiet ewlenin huma:
Faċċata huwa mudell ta 'disinn strutturali li jipprovdi interface simplifikata għal librerija, qafas, jew kwalunkwe sett kumpless ieħor ta' klassijiet.
Ejja nassumu li rridu nagħmlu xogħol ta' softwer, ibbażat fuq sett kbir ta' oġġetti li jappartjenu għal librerija jew qafas sofistikat. Normalment, ikollna bżonn ninizjalizzaw dawn l-oġġetti kollha, inżommu rekord tad-dipendenzi, inwettqu metodi fl-ordni korretta, eċċ.
Bħala riżultat, il-loġika tan-negozju tal-klassijiet tkun akkoppjata sewwa mad-dettalji tal-implimentazzjoni ta 'klassijiet ta' partijiet terzi, u tagħmilhom diffiċli biex jifhmu u jimmaniġġjaw.
a facade
hija klassi li tipprovdi interface sempliċi għal sottosistema kumplessa li fiha ħafna partijiet li jiċċaqilqu. A facade
jista' jipprovdi funzjonalità limitata meta mqabbel ma' xogħol dirett mas-subsistema. Madankollu, tinkludi biss il-karatteristiċi li l-klijenti verament jimpurtahom.
Għandek waħda facade
huwa utli meta għandna bżonn nintegraw l-app ma 'librerija sofistikata li għandha għexieren ta' karatteristiċi, iżda għandna bżonn biss parti żgħira tal-funzjonalità tagħha.
Pereżempju, app li ttella’ vidjows qosra umoristiċi bil-qtates fuq il-midja soċjali tista’ potenzjalment tuża librerija professjonali ta’ konverżjoni tal-vidjo. Madankollu, kulma neħtieġu huwa klassi bil-metodu uniku encode(filename, format)
. Wara li toħloq klassi bħal din u tgħaqqadha mal-librerija tal-konverżjoni tal-vidjo, se jkollna l-ewwel waħda tagħna facade
.
Pereżempju, l-operatur tat-telefon ta’ call center huwa bħal a facade
. Fil-fatt, meta nsejħu servizz tat-telefon ta’ ħanut biex nagħmlu ordni bit-telefon, operatur huwa tagħna facade
lejn is-servizzi u d-dipartimenti kollha tal-maħżen. L-operatur jipprovdi interface tal-vuċi sempliċi għas-sistema tal-ordnijiet, gateways tal-ħlas u diversi servizzi ta 'kunsinna.
Aħseb dwar Faċċata bħala adapter sempliċi għal xi sottosistemi kumplessi. Facade
jiżola l-kumplessità fi ħdan klassi waħda u jippermetti kodiċi ta 'applikazzjoni oħra li juża l-interface sempliċi.
F'dan l-eżempju, Facade
jaħbi l-kumplessità tal-librerija YouTube API u FFmpeg mill-kodiċi tal-klijent. Minflok ma jaħdem ma 'għexieren ta' klassijiet, il-klijent juża metodu sempliċi fuq Faċċata.
<?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
Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...
Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...
Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…
Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...