اندازي مطابق پڙهڻ جو وقت: 6 منٽ
هڪ ڊزائن جو نمونو ڪوڊ نه آهي جنهن کي اسان نقل ڪري سگھون ٿا ۽ اسان جي پروگرام ۾ داخل ڪري سگهون ٿا، جيئن اسان معياري افعال يا لائبريرين سان ڪري سگهون ٿا. ڊزائن جو نمونو هڪ عام تصور آهي جيڪو هڪ خاص مسئلو حل ڪرڻ جي قابل آهي. بنيادي طور تي هڪ نمونو جنهن جي تفصيل اسان جي پيروي ڪري سگهون ٿا ۽ هڪ حل لاڳو ڪري سگهون ٿا جيڪو اسان جي پروگرام جي حقيقت کي پورو ڪري ٿو.
ماڊل اڪثر ڪري الورورٿم سان پريشان آهن، ڇاڪاڻ ته ٻنهي تصورن کي ڪجهه ڄاڻايل مسئلن لاء عام حل بيان ڪن ٿا. جڏهن ته هڪ الگورتھم defiجيڪڏهن هميشه عملن جو هڪ واضح سيٽ آهي جيڪو هڪ خاص مقصد حاصل ڪري سگهي ٿو، هڪ ماڊل هڪ حل جي اعلي سطحي وضاحت آهي. ساڳئي ماڊل مان ڪوڊ ٻن مختلف پروگرامن تي لاڳو ٿي سگھي ٿو مختلف ٿي سگھي ٿو.
هڪ قياس ڪرڻ چاهيو ٿا، اسان هڪ پکڙڻ جي ترڪيب بابت سوچي سگهون ٿا: ٻنهي وٽ هڪ مقصد حاصل ڪرڻ لاءِ واضح قدم آهن. بهرحال، هڪ ماڊل هڪ منصوبي وانگر وڌيڪ آهي، جنهن مان توهان ڏسي سگهو ٿا ته نتيجو ۽ ان جون خاصيتون ڇا آهن، پر عمل جي صحيح ترتيب اسان تي منحصر آهي جيڪو ڪوڊ لکي ٿو.
گھڻن نمونن کي بلڪل رسمي طور بيان ڪيو ويو آھي ته جيئن ماڻھو انھن کي ڪيترن ئي حوالن ۾ ورجائي سگھن. اچو ته هيٺيان عناصر ڏسون جيڪي ماڊل جي وضاحت ۾ موجود آهن:
هڪ پروگرامر ڊزائن جي نمونن جي وجود کي ڄاڻڻ کان سواء سافٽ ويئر ٺاهي سگهي ٿو. ڪيترائي ڪندا آھن، ۽ انھيءَ سبب لاءِ اھي ڪجھھ اسڪيمون ان کي ڄاڻڻ کان سواءِ لاڳو ڪندا آھن. پر پوءِ ڇو اسان انهن کي سکڻ ۾ وقت گذاريون؟
ڊيزائن جا نمونا پيچيدگي، تفصيل جي سطح، ۽ سڄي ڊزائين ڪيل سسٽم ۾ لاڳو ٿيڻ جي ماپ ۾ مختلف آهن.
قياس جي ذريعي، اسان ڪجھ ٽريفڪ لائيٽن کي نصب ڪرڻ يا پيادلن لاءِ زير زمين لنگھندڙن سان گڏ ھڪ پوري گھڻ سطحي مٽاسٽا جي تعمير ڪري ھڪ چوراھ کي محفوظ بڻائي سگھون ٿا.
سڀ کان وڌيڪ بنيادي، گهٽ-سطح ماڊل اڪثر سڏيو ويندو آهي محاورا . اهي عام طور تي صرف هڪ واحد پروگرامنگ ٻولي تي لاڳو ٿين ٿا.
سڀ کان وڌيڪ عالمگير ۽ اعلي سطحي ماڊل آهن تعميراتي ماڊلز . ڊولپرز انهن نمونن کي عملي طور تي ڪنهن به ٻولي ۾ لاڳو ڪري سگهن ٿا. ٻين نمونن جي برعڪس، اهي استعمال ڪري سگھجن ٿيون مڪمل ايپليڪيشن جي فن تعمير کي ڊزائين ڪرڻ لاء.
ان کان سواء، سڀني ماڊلز کي انهن جي مطابق درجه بندي ڪري سگهجي ٿو ڪوشش ڪئي يا مقصد. ٽي مکيه طبقا آهن:
منهن ڏيڻ هڪ ڍانچي ڊيزائن جو نمونو آهي جيڪو لائبريري، فريم ورڪ، يا ڪلاسن جي ڪنهن ٻئي پيچيده سيٽ لاءِ آسان انٽرفيس مهيا ڪري ٿو.
اچو ته فرض ڪريون ته اسان کي سافٽ ويئر ڪم ڪرڻ جي ضرورت آهي، شين جي هڪ وڏي سيٽ جي بنياد تي، جيڪو هڪ نفيس لائبريري يا فريم ورڪ سان تعلق رکي ٿو. عام طور تي، اسان کي انهن سڀني شين کي شروع ڪرڻ جي ضرورت پوندي، انحصار جي ٽريڪ رکو، طريقن کي درست ترتيب ۾ عمل ڪريو، وغيره.
نتيجي طور، طبقن جو ڪاروباري منطق ٽين ڌر طبقن جي عمل درآمد جي تفصيلن سان مضبوطيءَ سان جڙيل ٿي ويندو، انھن کي سمجھڻ ۽ انتظام ڪرڻ ڏکيو بڻائيندو.
Una facade
ھڪڙو طبقو آھي جيڪو ھڪڙي پيچيده سب سسٽم کي ھڪڙو آسان انٽرفيس مهيا ڪري ٿو جنھن ۾ گھڻن ھلندڙ حصن تي مشتمل آھي. اي facade
سب سسٽم سان سڌو ڪم ڪرڻ جي مقابلي ۾ محدود ڪارڪردگي مهيا ڪري سگھي ٿي. بهرحال، ان ۾ صرف اهي خاصيتون شامل آهن جيڪي گراهڪ واقعي جو خيال رکندا آهن.
هڪ آهي facade
اهو مفيد آهي جڏهن اسان کي ايپ کي هڪ جديد لائبريري سان ضم ڪرڻ جي ضرورت آهي جنهن ۾ درجن جي خاصيتون آهن، پر اسان کي صرف ان جي ڪارڪردگي جو هڪ ننڍڙو حصو گهرجي.
مثال طور، هڪ ايپ جيڪا سوشل ميڊيا تي ٻليون ڏيکاريندڙ مختصر مزاحيه وڊيوز اپلوڊ ڪري ٿي، ممڪن طور استعمال ڪري سگھي ٿي هڪ پروفيشنل وڊيو ڪنورشن لائبريري. بهرحال، اسان کي واقعي جي ضرورت آهي هڪ طبقي سان هڪ واحد طريقو encode(filename, format)
. اهڙو ڪلاس ٺاهڻ ۽ ان کي وڊيو ڪنورشن لائبريري سان ڳنڍڻ کان پوءِ، اسان وٽ پهريون هوندو facade
.
مثال طور، هڪ ڪال سينٽر جو ٽيليفون آپريٽر هڪ جهڙو آهي facade
. حقيقت ۾، جڏهن اسان هڪ اسٽور جي ٽيليفون سروس کي ٽيليفون آرڊر ڏيڻ لاء سڏين ٿا، هڪ آپريٽر اسان جو آهي facade
اسٽور جي سڀني خدمتن ۽ شعبن ڏانهن. آپريٽر آرڊرنگ سسٽم، ادائگي جي گيٽ ويز ۽ مختلف ترسيل خدمتن لاءِ هڪ سادي وائس انٽرفيس مهيا ڪري ٿو.
جي باري ۾ سوچ منهن ڏيڻ ڪجھ پيچيده سب سسٽم لاءِ سادي اڊاپٽر جي طور تي. Facade
ھڪڙي ھڪڙي طبقي ۾ پيچيدگي کي الڳ ڪري ٿو ۽ ٻين ايپليڪيشن ڪوڊ کي سادو انٽرفيس استعمال ڪرڻ جي اجازت ڏئي ٿو.
هن مثال ۾، Facade
ڪلائنٽ ڪوڊ مان يوٽيوب API ۽ FFmpeg لائبريري جي پيچيدگي کي لڪائيندو آهي. ڪيترن ئي طبقن سان ڪم ڪرڻ بدران، ڪلائنٽ استعمال ڪري ٿو هڪ سادي طريقو 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 سائبر ڀڃڻ واري واقعي جي جوابي خدمتون فراهم ڪرڻ جاري رکندو. Coveware پيش ڪندو فرانزڪ ۽ ريميڊيشن صلاحيتون…
اڳڪٿي واري سار سنڀال تيل ۽ گئس جي شعبي ۾ انقلاب آڻيندي آهي، پلانٽ جي انتظام لاءِ هڪ جديد ۽ فعال طريقي سان.…
برطانيه جي سي ايم اي مصنوعي ڄاڻ رکندڙ مارڪيٽ ۾ بگ ٽيڪ جي رويي بابت خبردار ڪيو آهي. اتي…
"گرين هائوسز" فرمان، يورپي يونين پاران ٺاهيل عمارتن جي توانائي جي ڪارڪردگي کي وڌائڻ لاء، پنهنجي قانون سازي جي عمل کي ختم ڪري ڇڏيو آهي ...