Iye akoko kika: 6 iṣẹju
Apẹrẹ apẹrẹ kii ṣe koodu ti a le daakọ ati fi sii sinu eto wa, bi a ṣe le ṣe pẹlu awọn iṣẹ boṣewa tabi awọn ile-ikawe. Apẹrẹ apẹrẹ jẹ imọran gbogbogbo ti o lagbara lati yanju iṣoro kan pato. Ni ipilẹ awoṣe ti awọn alaye ti a le tẹle ati imuse ojutu kan ti o baamu otitọ ti eto wa.
Awọn awoṣe nigbagbogbo ni idamu pẹlu awọn algoridimu, nitori awọn imọran mejeeji ṣe apejuwe awọn solusan aṣoju si diẹ ninu awọn iṣoro ti a mọ. Nigba ti ohun alugoridimu defiTi o ba jẹ pe awọn iṣe ti o han gbangba nigbagbogbo wa ti o le ṣaṣeyọri ibi-afẹde kan, awoṣe jẹ apejuwe ipele ti o ga julọ ti ojutu kan. Koodu lati awoṣe kanna ti a lo si awọn eto oriṣiriṣi meji le yatọ.
Nfẹ lati ṣe afiwe, a le ronu ohunelo sise: mejeeji ni awọn igbesẹ ti o han gbangba lati ṣaṣeyọri ibi-afẹde kan. Sibẹsibẹ, awoṣe jẹ diẹ sii bi iṣẹ akanṣe kan, eyiti o le rii kini abajade ati awọn abuda rẹ jẹ, ṣugbọn ilana imuse gangan da lori wa ti o kọ koodu naa.
Pupọ awọn ilana ni a ṣapejuwe ni deede ki awọn eniyan le ṣe ẹda wọn ni ọpọlọpọ awọn aaye. Jẹ ki a wo ni isalẹ awọn eroja ti o wa ninu apejuwe ti awoṣe:
Olupilẹṣẹ le ṣe agbekalẹ sọfitiwia laisi mimọ aye ti awọn ilana apẹrẹ. Ọpọlọpọ ṣe, ati fun idi eyi wọn ṣe awọn eto diẹ laisi mimọ. Àmọ́, kí nìdí tó fi yẹ ká máa fi àkókò kọ́ wọn?
Awọn ilana apẹrẹ yatọ ni idiju, ipele ti alaye, ati iwọn lilo jakejado eto apẹrẹ.
Nipa afiwe, a le jẹ ki ikorita kan wa ni ailewu nipa fifi sori ẹrọ awọn ina opopona diẹ tabi kikọ odindipaṣipaarọ awọn ipele pupọ pẹlu awọn ọna ipamo fun awọn alarinkiri.
Awọn ipilẹ julọ, awọn awoṣe ipele kekere ni a npe ni nigbagbogbo idioms . Wọn maa n kan si ede siseto kan ṣoṣo.
Awọn awoṣe ti gbogbo agbaye ati giga julọ jẹ ayaworan si dede . Awọn olupilẹṣẹ le ṣe imuṣe awọn ilana wọnyi ni fere eyikeyi ede. Ko dabi awọn ilana miiran, wọn le ṣee lo lati ṣe apẹrẹ faaji ti ohun elo gbogbo.
Pẹlupẹlu, gbogbo awọn awoṣe le wa ni ipin gẹgẹ bi wọn gbiyanju tabi idi. Awọn kilasi akọkọ mẹta ni:
Facade jẹ ilana apẹrẹ igbekalẹ ti o pese wiwo irọrun si ile-ikawe kan, ilana, tabi eyikeyi awọn kilasi eka miiran.
Jẹ ki a ro pe a nilo lati jẹ ki sọfitiwia ṣiṣẹ, ti o da lori eto awọn nkan nla ti o jẹ ti ile-ikawe fafa tabi ilana. Ni deede, a yoo nilo lati pilẹṣẹ gbogbo awọn nkan wọnyi, tọju abala awọn igbẹkẹle, ṣiṣẹ awọn ọna ni ilana to pe, ati bẹbẹ lọ.
Bi abajade, imọ-ọrọ iṣowo ti awọn kilasi yoo di asopọ ni wiwọ si awọn alaye imuse ti awọn kilasi ẹni-kẹta, ṣiṣe wọn nira lati ni oye ati ṣakoso.
una facade
ni a kilasi ti o pese kan ti o rọrun ni wiwo to a eka subsystem ti o ni ọpọlọpọ awọn gbigbe awọn ẹya ara. A facade
le pese iṣẹ ṣiṣe to lopin akawe si ṣiṣẹ taara pẹlu eto-iṣẹ. Sibẹsibẹ, o nikan pẹlu awọn ẹya ara ẹrọ ti awọn onibara bikita gaan.
Ni ọkan facade
o wulo nigba ti a nilo lati ṣepọ awọn app pẹlu kan fafa ìkàwé ti o ni dosinni ti awọn ẹya ara ẹrọ, sugbon a nilo nikan kan kekere apa ti awọn oniwe-iṣẹ.
Fun apẹẹrẹ, ohun elo kan ti o gbejade awọn fidio alarinrin kukuru pẹlu awọn ologbo si media awujọ le ṣee lo ile-ikawe iyipada fidio alamọdaju. Sibẹsibẹ, gbogbo ohun ti a nilo gaan ni kilasi pẹlu ọna ẹyọkan encode(filename, format)
. Lẹhin ṣiṣẹda iru kilasi kan ati so pọ si ile-ikawe iyipada fidio, a yoo ni akọkọ wa facade
.
Fun apẹẹrẹ, oniṣẹ ẹrọ tẹlifoonu ti ile-iṣẹ ipe dabi a facade
. Ni otitọ, nigba ti a ba pe iṣẹ tẹlifoonu ile itaja kan lati paṣẹ fun tẹlifoonu, oniṣẹ ẹrọ jẹ tiwa facade
si gbogbo awọn iṣẹ ati awọn apa ti awọn itaja. Oniṣẹ n pese wiwo ohun ti o rọrun si eto aṣẹ, awọn ẹnu-ọna isanwo ati awọn iṣẹ ifijiṣẹ lọpọlọpọ.
Ronu nipa Facade bi ohun ti nmu badọgba ti o rọrun fun diẹ ninu awọn eka subsystems. Facade
ya sọtọ idiju laarin kilasi kan ati gba koodu ohun elo miiran laaye lati lo wiwo ti o rọrun.
Ninu apẹẹrẹ yii, Facade
tọju idiju ti YouTube API ati ile-ikawe FFmpeg lati koodu alabara. Dipo ti ṣiṣẹ pẹlu awọn dosinni ti awọn kilasi, alabara lo ọna ti o rọrun lori 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 nipasẹ Veeam yoo tẹsiwaju lati pese awọn iṣẹ esi iṣẹlẹ ikọlu cyber. Coveware yoo funni ni awọn oniwadi ati awọn agbara atunṣe…
Itọju isọtẹlẹ jẹ iyipada ti eka epo & gaasi, pẹlu imotuntun ati ọna imudani si iṣakoso ọgbin.…
UK CMA ti ṣe ikilọ kan nipa ihuwasi Big Tech ni ọja itetisi atọwọda. Nibẹ…
Ilana “Case Green”, ti a ṣe agbekalẹ nipasẹ European Union lati jẹki imunadoko agbara ti awọn ile, ti pari ilana isofin rẹ pẹlu…