Dema xwendinê ya texmînkirî: 6 minuti
Nimûneya sêwiranê ne kodek e ku em dikarin kopî bikin û têxin nav bernameya xwe, wekî ku em dikarin bi fonksiyonên standard an pirtûkxane re bikin. Nimûneya sêwiranê têgehek gelemperî ye ku dikare pirsgirêkek taybetî çareser bike. Di esasê xwe de modelek ku hûrguliyên wê em dikarin bişopînin û çareseriyek ku li gorî rastiya bernameya me be bicîh bînin.
Model bi gelemperî bi algorîtmayan re têne tevlihev kirin, ji ber ku her du têgeh çareseriyên tîpîk ên hin pirsgirêkên naskirî diyar dikin. Dema ku algorîtmayek defiGer her gav komek zelal a çalakiyan hebe ku dikare armancek diyarkirî bigihîje, modelek ravekek asta bilind a çareseriyê ye. Koda ji heman modelê ku ji du bernameyên cûda re hatî sepandin dibe ku cûda be.
Dixwazin ku em analojiyek çêbikin, em dikarin li ser reçeteyek çêkirina xwarinê bifikirin: her du jî gavên zelal hene ku bigihîjin armancekê. Lêbelê, modelek bêtir mîna projeyek e, ku hûn dikarin bibînin ka encam û taybetmendiyên wê çi ne, lê rêza rast a bicîhkirinê bi me ve girêdayî ye ku kodê dinivîse.
Piraniya şêweyan pir bi fermî têne vegotin da ku mirov bikaribe wan di gelek mijaran de ji nû ve hilberîne. Ka em li jêr hêmanên ku di danasîna modelekê de hene bibînin:
Bernamesazek dikare nermalavê pêş bixe bêyî ku zanibe hebûna şêweyên sêwiranê. Pir kes dikin, û ji ber vê yekê ew bêyî ku bizanibin hin plansaziyan pêk tînin. Lê nexwe çima divê em wextê xwe bidin hînbûna wan?
Nimûneyên sêwiranê di tevlihevî, asta hûrguliyê, û pîvana sepandinê de li seranserê pergala sêwirandî cûda dibin.
Bi analogê, em dikarin bi sazkirina çend roniyên trafîkê an jî avakirina tevahiyek pir-astî bi rêgehên jêrzemînê yên ji bo peyayan, xaçerêyek ewledartir bikin.
Modelên herî bingehîn, kêm-asta pir caran têne gotin biwêjên . Ew bi gelemperî tenê ji bo zimanek bernameyek yekane bicîh dikin.
Modelên herî gerdûnî û bilind in modelên mîmarî . Pêşdebir dikarin van şêweyan hema hema bi her zimanî bicîh bikin. Berevajî qalibên din, ew dikarin ji bo sêwirana mîmariya serîlêdanek tevahî werin bikar anîn.
Wekî din, hemî model dikarin li gorî wan werin dabeş kirin niyet an armanc. Sê çînên sereke ev in:
facade şêweyek sêwirana strukturel e ku navbeynek sadekirî ji pirtûkxaneyek, çarçoveyek, an komek din a çînên tevlihev re peyda dike.
Ka em bifikirin ku pêdivî ye ku em nermalavê bixebitin, li ser bingeha komek mezin a tiştên ku girêdayî pirtûkxaneyek an çarçoveyek sofîstîke ne. Bi gelemperî, em hewce ne ku van hemî tiştan dest pê bikin, girêdanan bişopînin, rêbazan di rêza rast de bicîh bikin, û hwd.
Wekî encamek, mantiqa karsaziya dersan dê bi hûrguliyên pêkanîna dersên sêyemîn re hişk were girêdan, ku fêmkirin û birêvebirina wan dijwar dike.
Una facade
çînek e ku navgînek hêsan ji binepergalek tevlihev re ku gelek beşên tevgerî vedihewîne peyda dike. YEK facade
dibe ku li gorî xebata rasterast bi bine pergalê re fonksiyonek tixûbdar peyda bike. Lêbelê, ew tenê taybetmendiyên ku xerîdar bi rastî lê eleqedar dibin vedihewîne.
Yek hebe facade
ew bikêr e dema ku pêdivî ye ku em sepanê bi pirtûkxaneyek sofîstîke ya ku bi dehan taybetmendî lê hene yek bikin, lê em tenê beşek piçûk ji fonksiyona wê hewce ne.
Mînakî, serîlêdanek ku vîdyoyên kurt ên kêfê yên bi pisîkan re li ser medyaya civakî bar dike dikare bi potansiyel pirtûkxaneyek veguheztina vîdyoyê ya profesyonel bikar bîne. Lêbelê, ya ku em bi rastî hewce ne pola bi rêbazek yekane ye encode(filename, format)
. Piştî afirandina çînek wusa û girêdana wê bi pirtûkxaneya veguheztina vîdyoyê re, em ê yekema xwe hebin facade
.
Mînakî, operatora telefonê ya navendek bangê mîna a facade
. Bi rastî, gava ku em bangî karûbarê têlefonê dikanek dikin da ku fermanek têlefonê bidin, operatorek ya me ye facade
ber bi hemû karûbar û beşên dikanê. Operator navgînek dengek hêsan a pergala fermankirinê, dergehên dravdanê û karûbarên radestkirinê yên cihêreng peyda dike.
Bifikirin facade wekî adapterek hêsan ji bo hin bine pergalên tevlihev. Facade
tevliheviyê di nav yek polê de veqetîne û destûrê dide koda serîlêdana din ku pêwendiya hêsan bikar bîne.
Di vê nimûneyê de, Facade
tevliheviya pirtûkxaneya YouTube API û FFmpeg ji koda xerîdar vedişêre. Li şûna ku bi dehan dersan re bixebite, xerîdar li ser Facade rêbazek hêsan bikar tîne.
<?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 ji hêla Veeam ve dê berdewam bike ku karûbarên bersivdayina bûyera xerckirina sîber peyda bike. Coveware dê kapasîteyên dadwerî û sererastkirinê pêşkêşî bike…
Lênêrîna pêşbînîkirî di sektora neft û gazê de, bi nêzîkatiyek nûjen û çalak a rêveberiya nebatê şoreşek dike.…
CMA ya Keyaniya Yekbûyî di derbarê reftarên Big Tech de di bazara îstîxbarata çêkirî de hişyariyek derxist. Va…
Biryarnameya "Xalên Kesk", ku ji hêla Yekîtiya Ewropî ve ji bo zêdekirina karbidestiya enerjiyê ya avahiyan hatî damezrandin, pêvajoya xwe ya qanûnî bi…