Oge agụpụtara echere: 6 minuti
Ụkpụrụ imewe abụghị koodu nke anyị nwere ike idetuo ma tinye n'ime mmemme anyị, dịka anyị nwere ike iji ọrụ ọkọlọtọ ma ọ bụ ọba akwụkwọ mee. Ụkpụrụ imewe bụ echiche izugbe nwere ike idozi otu nsogbu. N'ụzọ bụ isi ihe nlereanya nke nkọwa ya anyị nwere ike ịgbaso ma mejuputa ngwọta nke dabara na eziokwu nke mmemme anyị.
Ụdị na-enwekarị mgbagwoju anya na algọridim, n'ihi na echiche abụọ ahụ na-akọwa ihe ngwọta nke nsogbu ụfọdụ mara. Mgbe algorithm defiỌ bụrụ na enwere usoro omume doro anya mgbe niile nke nwere ike imezu ebumnuche ụfọdụ, ihe nlereanya bụ nkọwa ọkwa dị elu nke ngwọta. Koodu sitere na otu ụdị etinyere na mmemme abụọ dị iche iche nwere ike ịdị iche.
N'ịchọ ịme ihe atụ, anyị nwere ike iche maka uzommeputa isi nri: ha abụọ nwere usoro doro anya iji nweta ihe mgbaru ọsọ. Otú ọ dị, ihe nlereanya dị ka ọrụ, nke ị nwere ike ịhụ ihe ga-esi na ya pụta na njirimara ya, ma kpọmkwem usoro nke mmejuputa iwu na-adabere na anyị bụ ndị na-ede koodu.
A na-akọwa ọtụtụ ụkpụrụ ka ndị mmadụ nwee ike imepụtaghachi ha n'ọtụtụ ebe. Ka anyị hụ n'okpuru ihe ndị dị na nkọwa nke ihe nlereanya:
Onye mmemme nwere ike ịmepụta ngwanrọ na-amaghị ịdị adị nke ụkpụrụ imewe. Ọtụtụ na-eme ya, n'ihi nke a, ha na-eme atụmatụ ụfọdụ n'amaghị ama. Ma gịnịzi mere anyị ga-eji na-ewepụta oge mụọ ha?
Ụkpụrụ imewe dị iche na mgbagwoju anya, ọkwa nke nkọwa, na ọnụ ọgụgụ nke itinye n'ọrụ n'ime usoro a haziri.
Site na ntụnyere, anyị nwere ike ime ka ụzọ nrutu dị nchebe site n'ịwụnye ọkụ okporo ụzọ ole na ole ma ọ bụ wulite mgbanwe mgbanwe dị iche iche na ụzọ n'okpuru ala maka ndị na-agafe agafe.
A na-akpọkarị ụdị nke kachasị, nke dị ala akpaalaokwu . Ha na-emetụtakarị naanị otu asụsụ mmemme.
Ụdị kachasị nke ụwa na nke dị elu bụ ụkpụrụ ụlọ . Ndị nrụpụta nwere ike mejuputa ụkpụrụ ndị a n'asụsụ ọ bụla. N'adịghị ka usoro ndị ọzọ, enwere ike iji ha chepụta ihe owuwu nke ngwa niile.
Ọzọkwa, enwere ike kewaa ụdị niile dịka ha si dị ebumnobi ma ọ bụ nzube. Klas atọ bụ isi bụ:
Iche ihu bụ ụkpụrụ nhazi nhazi nke na-enye interface dị mfe maka ụlọ akwụkwọ, ihe nhazi, ma ọ bụ klaasị ọ bụla dị mgbagwoju anya.
Ka anyị chee na anyị kwesịrị ime ka sọftụwia rụọ ọrụ, dabere n'ọtụtụ ihe dị n'ọbá akwụkwọ ma ọ bụ usoro ọkaibe. Dị ka ọ na-adịkarị, anyị ga-achọ ibido ihe ndị a niile, debe ihe ndabere, mee usoro n'usoro ziri ezi, na ihe ndị ọzọ.
N'ihi ya, echiche azụmahịa nke klaasị ga-ejikọta ya na nkọwa mmejuputa iwu nke klaasị ndị ọzọ, na-eme ka ha sie ike nghọta na jikwaa.
una facade
bụ klaasị nke na-enye interface dị mfe maka sistemu dị mgbagwoju anya nke nwere ọtụtụ akụkụ na-akpụ akpụ. A facade
nwere ike inye obere ọrụ ma e jiri ya tụnyere ịrụ ọrụ ozugbo na sistemụ subsystem. Agbanyeghị, ọ gụnyere naanị njirimara ndị ahịa na-eche n'ezie.
Nwere otu facade
ọ bara uru mgbe anyị kwesịrị ijikọ ngwa ahụ na ọbá akwụkwọ ọkaibe nke nwere ọtụtụ atụmatụ, mana anyị chọrọ naanị obere akụkụ nke ọrụ ya.
Dịka ọmụmaatụ, ngwa na-ebugo obere vidiyo na-akpa ọchị nwere nwamba na mgbasa ozi ọha nwere ike iji ọbá akwụkwọ ntụgharị vidiyo ọkachamara. Agbanyeghị, naanị ihe anyị chọrọ bụ klas nwere otu usoro encode(filename, format)
. Mgbe ịmepụtara klas dị otú ahụ ma jikọta ya na ọbá akwụkwọ ntụgharị vidiyo, anyị ga-enwe nke mbụ anyị facade
.
Dịka ọmụmaatụ, onye na-ahụ maka ekwentị nke ebe oku dị ka a facade
. N'ezie, mgbe anyị kpọrọ ọrụ ekwentị ụlọ ahịa iji nye iwu ekwentị, onye ọrụ bụ nke anyị facade
kwupụta ọrụ na ngalaba niile nke ụlọ ahịa ahụ. Onye na-arụ ọrụ na-enye ụda olu dị mfe maka usoro nhazi, ọnụ ụzọ ịkwụ ụgwọ na ọrụ nnyefe dị iche iche.
Chee echiche banyere Iche ihu dị ka a mfe nkwụnye maka ụfọdụ mgbagwoju subsystems. Facade
na-ekewapụta mgbagwoju anya n'ime otu klaasị ma na-enye ohere ka koodu ngwa ndị ọzọ jiri interface dị mfe.
N'ihe atụ a, Facade
na-ezochi mgbagwoju anya nke YouTube API na FFmpeg ọba akwụkwọ site na koodu ndị ahịa. Kama ịrụ ọrụ na ọtụtụ klaasị, onye ahịa na-eji usoro dị mfe na 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
Coveware nke Veeam ga-aga n'ihu na-enye ọrụ nzaghachi ihe omume cyber. Coveware ga-enye forensics na ike mmezi…
Ndozi amụma na-agbanwe mpaghara mmanụ & gas, na-enwe usoro ọhụrụ na ngwa ngwa maka njikwa ihe ọkụkụ.…
UK CMA enyela ịdọ aka ná ntị gbasara omume Big Tech na ahịa ọgụgụ isi. Ebe ahụ…
Iwu “Case Green”, nke European Union chepụtara iji kwalite nrụpụta ike nke ụlọ, ejirila…