Manaʻo manawa heluhelu: 6 minuke
ʻAʻole code hoʻolālā kahi hiki iā mākou ke kope a hoʻokomo i kā mākou papahana, e like me kā mākou e hana ai me nā hana maʻamau a i ʻole nā hale waihona puke. ʻO ke kumu hoʻolālā he manaʻo maʻamau e hiki ke hoʻoponopono i kahi pilikia. ʻO ke kumu hoʻohālike e hiki ai iā mākou ke hahai a hoʻokō i kahi hopena i kūpono i ka ʻoiaʻiʻo o kā mākou papahana.
Hoʻopili pinepine ʻia nā hiʻohiʻona me nā algorithms, no ka mea, wehewehe nā manaʻo ʻelua i nā hoʻonā maʻamau i kekahi mau pilikia i ʻike ʻia. ʻOiai he algorithm defiInā loaʻa mau kahi ʻano hana e hiki ai ke hoʻokō i kekahi pahuhopu, ʻo ke kumu hoʻohālike he wehewehe kiʻekiʻe o ka hopena. He ʻokoʻa paha ke code mai ka hoʻohālike like i hoʻohana ʻia i ʻelua papahana like ʻole.
Ke makemake nei mākou e hana i kahi hoʻohālikelike, hiki iā mākou ke noʻonoʻo i kahi meaʻai kuke: loaʻa iā lāua nā ʻanuʻu maopopo e hoʻokō i kahi pahuhopu. Eia nō naʻe, ʻoi aku ke ʻano o kahi hiʻohiʻona e like me kahi papahana, kahi āu e ʻike ai i ke ʻano o ka hopena a me kāna mau hiʻohiʻona, akā ʻo ke ʻano pololei o ka hoʻokō e pili ana iā mākou e kākau i ke code.
Hōʻike ʻia ka hapa nui o nā mamana i hiki i nā kānaka ke hana hou iā lākou ma nā ʻano he nui. E ʻike kākou ma lalo o nā mea i loaʻa i ka wehewehe ʻana o kahi kŘkohu:
Hiki i ka mea papahana ke hoʻomohala i nā polokalamu me ka ʻike ʻole i ke ola ʻana o nā ʻano hoʻolālā. Nui ka poʻe e hana, a no kēia kumu ke hoʻokō nei lākou i kekahi mau papahana me ka ʻike ʻole. Akā, no ke aha mākou e hoʻolimalima manawa e aʻo ai iā lākou?
ʻOkoʻa nā ʻano hoʻolālā i ka paʻakikī, ka pae kikoʻī, a me ka nui o ka hoʻohana ʻana ma ka ʻōnaehana i hoʻolālā ʻia.
Ma ka hoʻohālikelike, hiki iā mākou ke hana i kahi alahele me ka palekana ma o ka hoʻokomo ʻana i kekahi mau kukui kaʻaahi a i ʻole ke kūkulu ʻana i kahi kikowaena multilevel holoʻokoʻa me nā alahele lalo no ka poʻe hele wāwae.
ʻO nā kumu hoʻohālike nui, haʻahaʻa haʻahaʻa i kapa pinepine ʻia idioms . Hoʻohana pinepine lākou i hoʻokahi ʻōlelo papahana.
ʻO nā hiʻohiʻona nui loa a me ke kūlana kiʻekiʻe hale hoʻohālike . Hiki i nā mea hoʻomohala ke hoʻokō i kēia mau hiʻohiʻona ma nā ʻōlelo a pau. ʻAʻole like me nā hiʻohiʻona ʻē aʻe, hiki ke hoʻohana ʻia e hoʻolālā i ka hoʻolālā o kahi noi holoʻokoʻa.
Eia kekahi, hiki ke hoʻokaʻawale ʻia nā hiʻohiʻona āpau e like me kā lākou ua hoʻāʻo a i ʻole ke kumu. ʻO nā papa nui ʻekolu:
Nahenahe He kumu hoʻolālā hoʻolālā e hāʻawi ana i kahi kikowaena maʻalahi i kahi waihona, framework, a i ʻole nā papa hana paʻakikī ʻē aʻe.
E noʻonoʻo mākou pono mākou e hana i nā lako polokalamu, e pili ana i kahi pūʻulu nui o nā mea i pili i kahi waihona a i ʻole ka hoʻolālā. ʻO ka mea maʻamau, pono mākou e hoʻomaka i kēia mau mea āpau, e mālama i nā hilinaʻi, e hoʻokō i nā ʻano hana ma ke ʻano kūpono, a pēlā aku.
ʻO ka hopena, e hoʻopili paʻa ʻia ka loiloi ʻoihana o nā papa me nā kikoʻī hoʻokō o nā papa ʻaoʻao ʻekolu, e paʻakikī iā lākou ke hoʻomaopopo a mālama.
Una facade
He papa ia e hāʻawi ana i kahi kikowaena maʻalahi i kahi subsystem paʻakikī i loaʻa nā ʻāpana he nui. A facade
hiki ke hāʻawi i nā hana liʻiliʻi i hoʻohālikelike ʻia me ka hana pololei me ka subsystem. Eia nō naʻe, aia wale nō nā hiʻohiʻona e mālama pono ai nā mea kūʻai aku.
Loaʻa i hoʻokahi facade
He mea pono ia i ka wā e pono ai mākou e hoʻohui i ka app me kahi hale waihona puke i loaʻa i nā hanana he nui, akā pono mākou i kahi hapa liʻiliʻi o kāna hana.
No ka laʻana, hiki i kahi polokalamu e hoʻouka ana i nā wikiō ʻakaʻaka pōkole e hōʻike ana i nā pōpoki i ka pāpaho pūnaewele hiki ke hoʻohana i kahi waihona hoʻololi wikiō ʻoihana. Eia nō naʻe, ʻo kā mākou mea e pono ai he papa me ke ʻano hoʻokahi encode(filename, format)
. Ma hope o ka hana ʻana i kēlā papa a hoʻopili iā ia i ka waihona hoʻololi wikiō, e loaʻa iā mākou kā mākou mea mua facade
.
No ka laʻana, ʻo ka mea hoʻohana kelepona o kahi kikowaena kelepona e like me a facade
. ʻOiaʻiʻo, ke kāhea mākou i ka lawelawe kelepona o kahi hale kūʻai e kau i kahi kauoha kelepona, na mākou ka mea hoʻohana facade
i nā lawelawe a me nā keʻena o ka hale kūʻai. Hāʻawi ka mea hoʻohana i kahi leo leo maʻalahi i ka ʻōnaehana kauoha, nā puka uku a me nā lawelawe hoʻouna like ʻole.
E noʻonoʻo Nahenahe ma ke ʻano he mea hoʻopili maʻalahi no kekahi mau subsystem paʻakikī. Facade
hoʻokaʻawale i ka paʻakikī i loko o kahi papa hoʻokahi a ʻae i nā code palapala noi e hoʻohana i ka interface maʻalahi.
Ma kēia laʻana, Facade
huna i ka paʻakikī o ka YouTube API a me ka waihona FFmpeg mai ka code client. Ma kahi o ka hana ʻana me nā papa he nui, hoʻohana ka mea kūʻai aku i kahi ala maʻalahi ma 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
E hoʻomau ʻo Coveware e Veeam i ka hoʻolako ʻana i nā lawelawe pane ʻana i ka hanana cyber extortion. E hāʻawi ʻo Coveware i nā forensics a me nā mana hoʻoponopono…
Ke hoʻololi nei ka mālama wānana ʻana i ka ʻāpana ʻaila a me ke kinoea, me kahi ala hou a hoʻoikaika i ka hoʻokele mea kanu.…
Ua hoʻopuka ka UK CMA i kahi ʻōlelo aʻo e pili ana i ka hana a Big Tech i ka mākeke naʻauao. Aia…
ʻO ka "Case Green" Decree, i hoʻokumu ʻia e ka European Union e hoʻonui ai i ka ikehu o nā hale, ua hoʻopau i kāna kaʻina hana kānāwai me…