مقالات

ڊيزائن جا نمونا ڇا آهن: انهن کي ڇو استعمال ڪريو، درجه بندي، نفعو ۽ نقصان

سافٽ ويئر انجنيئرنگ ۾، ڊيزائن جا نمونا انهن مسئلن جو بهترين حل آهن جيڪي عام طور تي سافٽ ويئر ڊيزائن ۾ ٿين ٿيون.

اهي اڳئين منصوبن وانگر آهنdefinite، آزمايل ۽ آزمايل اوزار جيڪي توھان پنھنجي ڪوڊ ۾ بار بار ڊيزائن جي مسئلي کي حل ڪرڻ لاءِ ڪسٽمائيز ڪري سگھو ٿا.

اندازي مطابق پڙهڻ جو وقت: 6 منٽ

ڊزائن جو نمونو ڇا آهي

هڪ ڊزائن جو نمونو ڪوڊ نه آهي جنهن کي اسان نقل ڪري سگھون ٿا ۽ اسان جي پروگرام ۾ داخل ڪري سگهون ٿا، جيئن اسان معياري افعال يا لائبريرين سان ڪري سگهون ٿا. ڊزائن جو نمونو هڪ عام تصور آهي جيڪو هڪ خاص مسئلو حل ڪرڻ جي قابل آهي. بنيادي طور تي هڪ نمونو جنهن جي تفصيل اسان جي پيروي ڪري سگهون ٿا ۽ هڪ حل لاڳو ڪري سگهون ٿا جيڪو اسان جي پروگرام جي حقيقت کي پورو ڪري ٿو.

ماڊل اڪثر ڪري الورورٿم سان پريشان آهن، ڇاڪاڻ ته ٻنهي تصورن کي ڪجهه ڄاڻايل مسئلن لاء عام حل بيان ڪن ٿا. جڏهن ته هڪ الگورتھم defiجيڪڏهن هميشه عملن جو هڪ واضح سيٽ آهي جيڪو هڪ خاص مقصد حاصل ڪري سگهي ٿو، هڪ ماڊل هڪ حل جي اعلي سطحي وضاحت آهي. ساڳئي ماڊل مان ڪوڊ ٻن مختلف پروگرامن تي لاڳو ٿي سگھي ٿو مختلف ٿي سگھي ٿو.

هڪ قياس ڪرڻ چاهيو ٿا، اسان هڪ پکڙڻ جي ترڪيب بابت سوچي سگهون ٿا: ٻنهي وٽ هڪ مقصد حاصل ڪرڻ لاءِ واضح قدم آهن. بهرحال، هڪ ماڊل هڪ منصوبي وانگر وڌيڪ آهي، جنهن مان توهان ڏسي سگهو ٿا ته نتيجو ۽ ان جون خاصيتون ڇا آهن، پر عمل جي صحيح ترتيب اسان تي منحصر آهي جيڪو ڪوڊ لکي ٿو.

ڊيزائن جو نمونو ڇا آهي؟

گھڻن نمونن کي بلڪل رسمي طور بيان ڪيو ويو آھي ته جيئن ماڻھو انھن کي ڪيترن ئي حوالن ۾ ورجائي سگھن. اچو ته هيٺيان عناصر ڏسون جيڪي ماڊل جي وضاحت ۾ موجود آهن:

  • ارادو ماڊل جو مختصر طور تي مسئلو ۽ حل ٻنهي کي بيان ڪري ٿو.
  • مقصد وڌيڪ وضاحت ڪري ٿو مسئلو ۽ حل جيڪو ماڊل ممڪن بڻائي ٿو.
  • ساخت طبقن جا نمونا ڏيکاري ٿو هر هڪ حصو ۽ ڪيئن اهي لاڳاپيل آهن.
  • ڪوڊ جو مثال سڀ کان وڌيڪ مشهور پروگرامنگ ٻولين مان هڪ ۾ ماڊل جي پويان خيال کي سمجهڻ آسان بڻائي ٿي.

ان کي ڇو استعمال ڪيو؟

هڪ پروگرامر ڊزائن جي نمونن جي وجود کي ڄاڻڻ کان سواء سافٽ ويئر ٺاهي سگهي ٿو. ڪيترائي ڪندا آھن، ۽ انھيءَ سبب لاءِ اھي ڪجھھ اسڪيمون ان کي ڄاڻڻ کان سواءِ لاڳو ڪندا آھن. پر پوءِ ڇو اسان انهن کي سکڻ ۾ وقت گذاريون؟

  • ڊيزائن جي نمونن جو هڪ کٽ آهي ڪوشش ڪئي ۽ آزمائشي حل سافٽ ويئر ڊيزائن ۾ عام مسئلن ڏانهن. جيتوڻيڪ توهان ڪڏهن به انهن مسئلن کي منهن نه ٿا ڏيو، ڄاڻڻ جا نمونا اڃا به ڪارائتو آهن ڇو ته اهو توهان کي سيکاريندو آهي ته هر قسم جي مسئلن کي حل ڪرڻ جو طريقو اعتراض تي مبني ڊيزائن جي اصولن کي استعمال ڪندي.
  • ڊيزائن جا ماڊل defiاهي هڪ عام ٻولي ٺاهيندا آهن جنهن کي توهان ۽ توهان جي ٽيم استعمال ڪري سگهو ٿا وڌيڪ اثرائتي گفتگو ڪرڻ لاءِ. توهان چئي سگهو ٿا، "او، صرف اهو ڪرڻ لاء هڪ سنگلٽن استعمال ڪريو،" ۽ هرڪو توهان جي تجويز جي پويان خيال سمجهي سگهندو. هتي وضاحت ڪرڻ جي ڪا ضرورت ناهي ته سنگلٽن ڇا آهي جيڪڏهن توهان نموني ۽ ان جو نالو ڄاڻو ٿا.

ڊيزائن جي نمونن جي درجه بندي

ڊيزائن جا نمونا پيچيدگي، تفصيل جي سطح، ۽ سڄي ڊزائين ڪيل سسٽم ۾ لاڳو ٿيڻ جي ماپ ۾ مختلف آهن.

قياس جي ذريعي، اسان ڪجھ ٽريفڪ لائيٽن کي نصب ڪرڻ يا پيادلن لاءِ زير زمين لنگھندڙن سان گڏ ھڪ پوري گھڻ سطحي مٽاسٽا جي تعمير ڪري ھڪ چوراھ کي محفوظ بڻائي سگھون ٿا.

سڀ کان وڌيڪ بنيادي، گهٽ-سطح ماڊل اڪثر سڏيو ويندو آهي محاورا . اهي عام طور تي صرف هڪ واحد پروگرامنگ ٻولي تي لاڳو ٿين ٿا.

سڀ کان وڌيڪ عالمگير ۽ اعلي سطحي ماڊل آهن تعميراتي ماڊلز . ڊولپرز انهن نمونن کي عملي طور تي ڪنهن به ٻولي ۾ لاڳو ڪري سگهن ٿا. ٻين نمونن جي برعڪس، اهي استعمال ڪري سگھجن ٿيون مڪمل ايپليڪيشن جي فن تعمير کي ڊزائين ڪرڻ لاء.

ان کان سواء، سڀني ماڊلز کي انهن جي مطابق درجه بندي ڪري سگهجي ٿو ڪوشش ڪئي يا مقصد. ٽي مکيه طبقا آهن:

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.
  • تخليقي ماڊلز اهي شيون ٺاهي ميڪانيزم مهيا ڪن ٿيون جيڪي موجوده ڪوڊ جي لچڪ ۽ ٻيهر استعمال کي وڌائين ٿا.
  • ساخت جي ماڊلز اهي وضاحت ڪن ٿا ته شين ۽ طبقن کي ڪيئن گڏ ڪيو وڃي وڏن ڍانچين ۾، انهن ساختن کي لچڪدار ۽ ڪارائتو رکي.
  • رويي جا ماڊل اهي شيون جي وچ ۾ موثر رابطي ۽ ذميوارين جي تفويض سان ڊيل ڪن ٿا.

Laravel ۾ ڊيزائن جي نموني جو مثال: Facade

منهن ڏيڻ هڪ ڍانچي ڊيزائن جو نمونو آهي جيڪو لائبريري، فريم ورڪ، يا ڪلاسن جي ڪنهن ٻئي پيچيده سيٽ لاءِ آسان انٽرفيس مهيا ڪري ٿو.

مسئلو

اچو ته فرض ڪريون ته اسان کي سافٽ ويئر ڪم ڪرڻ جي ضرورت آهي، شين جي هڪ وڏي سيٽ جي بنياد تي، جيڪو هڪ نفيس لائبريري يا فريم ورڪ سان تعلق رکي ٿو. عام طور تي، اسان کي انهن سڀني شين کي شروع ڪرڻ جي ضرورت پوندي، انحصار جي ٽريڪ رکو، طريقن کي درست ترتيب ۾ عمل ڪريو، وغيره.

نتيجي طور، طبقن جو ڪاروباري منطق ٽين ڌر طبقن جي عمل درآمد جي تفصيلن سان مضبوطيءَ سان جڙيل ٿي ويندو، انھن کي سمجھڻ ۽ انتظام ڪرڻ ڏکيو بڻائيندو.

حل

Una facade ھڪڙو طبقو آھي جيڪو ھڪڙي پيچيده سب سسٽم کي ھڪڙو آسان انٽرفيس مهيا ڪري ٿو جنھن ۾ گھڻن ھلندڙ حصن تي مشتمل آھي. اي facade سب سسٽم سان سڌو ڪم ڪرڻ جي مقابلي ۾ محدود ڪارڪردگي مهيا ڪري سگھي ٿي. بهرحال، ان ۾ صرف اهي خاصيتون شامل آهن جيڪي گراهڪ واقعي جو خيال رکندا آهن.

هڪ آهي facade اهو مفيد آهي جڏهن اسان کي ايپ کي هڪ جديد لائبريري سان ضم ڪرڻ جي ضرورت آهي جنهن ۾ درجن جي خاصيتون آهن، پر اسان کي صرف ان جي ڪارڪردگي جو هڪ ننڍڙو حصو گهرجي.

مثال طور، هڪ ايپ جيڪا سوشل ميڊيا تي ٻليون ڏيکاريندڙ مختصر مزاحيه وڊيوز اپلوڊ ڪري ٿي، ممڪن طور استعمال ڪري سگھي ٿي هڪ پروفيشنل وڊيو ڪنورشن لائبريري. بهرحال، اسان کي واقعي جي ضرورت آهي هڪ طبقي سان هڪ واحد طريقو encode(filename, format). اهڙو ڪلاس ٺاهڻ ۽ ان کي وڊيو ڪنورشن لائبريري سان ڳنڍڻ کان پوءِ، اسان وٽ پهريون هوندو facade.

مثال طور، هڪ ڪال سينٽر جو ٽيليفون آپريٽر هڪ جهڙو آهي facade. حقيقت ۾، جڏهن اسان هڪ اسٽور جي ٽيليفون سروس کي ٽيليفون آرڊر ڏيڻ لاء سڏين ٿا، هڪ آپريٽر اسان جو آهي facade اسٽور جي سڀني خدمتن ۽ شعبن ڏانهن. آپريٽر آرڊرنگ سسٽم، ادائگي جي گيٽ ويز ۽ مختلف ترسيل خدمتن لاءِ هڪ سادي وائس انٽرفيس مهيا ڪري ٿو.

PHP ۾ حقيقي مثال

جي باري ۾ سوچ منهن ڏيڻ ڪجھ پيچيده سب سسٽم لاءِ سادي اڊاپٽر جي طور تي. 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

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

تازيون مضمونون

Veeam خاصيتون ransomware لاءِ سڀ کان وڌيڪ جامع سپورٽ ، تحفظ کان وٺي جواب ۽ بحالي تائين

ويم پاران Coveware سائبر ڀڃڻ واري واقعي جي جوابي خدمتون فراهم ڪرڻ جاري رکندو. Coveware پيش ڪندو فرانزڪ ۽ ريميڊيشن صلاحيتون…

23 اپريل 2024

گرين ۽ ڊجيٽل انقلاب: ڪيئن اڳڪٿي واري سار سنڀال تيل ۽ گئس جي صنعت کي تبديل ڪري رهي آهي

اڳڪٿي واري سار سنڀال تيل ۽ گئس جي شعبي ۾ انقلاب آڻيندي آهي، پلانٽ جي انتظام لاءِ هڪ جديد ۽ فعال طريقي سان.…

22 اپريل 2024

برطانيه جي اينٽي ٽرسٽ ريگيوليٽر GenAI مٿان بگ ٽيڪ الارم وڌائيندو آهي

برطانيه جي سي ايم اي مصنوعي ڄاڻ رکندڙ مارڪيٽ ۾ بگ ٽيڪ جي رويي بابت خبردار ڪيو آهي. اتي…

18 اپريل 2024

ڪاسا گرين: توانائي انقلاب اٽلي ۾ پائيدار مستقبل لاءِ

"گرين هائوسز" فرمان، يورپي يونين پاران ٺاهيل عمارتن جي توانائي جي ڪارڪردگي کي وڌائڻ لاء، پنهنجي قانون سازي جي عمل کي ختم ڪري ڇڏيو آهي ...

18 اپريل 2024

پنھنجي ٻوليءَ ۾ جدت پڙھو

جدت نيوز ليٽر
جدت تي سڀ کان اهم خبر نه وڃايو. انهن کي اي ميل ذريعي حاصل ڪرڻ لاء سائن اپ ڪريو.

اسان جي تابعداري ڪريو