مضامین

ڈیزائن کے نمونے کیا ہیں: انہیں کیوں استعمال کریں، درجہ بندی، فوائد اور نقصانات

سافٹ ویئر انجینئرنگ میں، ڈیزائن پیٹرن ان مسائل کا بہترین حل ہیں جو عام طور پر سافٹ ویئر ڈیزائن میں پائے جاتے ہیں۔

وہ پری پروجیکٹس کی طرح ہیں۔defiنائٹ، آزمائے گئے اور آزمائے گئے ٹولز جنہیں آپ اپنے کوڈ میں بار بار آنے والے ڈیزائن کے مسئلے کو حل کرنے کے لیے اپنی مرضی کے مطابق بنا سکتے ہیں۔

پڑھنے کا تخمینہ وقت: 6 منٹو

ڈیزائن پیٹرن کیا ہے؟

ڈیزائن پیٹرن وہ کوڈ نہیں ہے جسے ہم اپنے پروگرام میں کاپی کر کے داخل کر سکتے ہیں، جیسا کہ ہم معیاری فنکشنز یا لائبریریوں کے ساتھ کر سکتے ہیں۔ ڈیزائن پیٹرن ایک عام تصور ہے جو کسی خاص مسئلے کو حل کرنے کے قابل ہے۔ بنیادی طور پر ایک ماڈل جس کی تفصیلات پر ہم عمل کر سکتے ہیں اور ایک ایسے حل کو نافذ کر سکتے ہیں جو ہمارے پروگرام کی حقیقت کے مطابق ہو۔

ماڈلز اکثر الگورتھم کے ساتھ الجھ جاتے ہیں، کیونکہ دونوں تصورات کچھ معلوم مسائل کے مخصوص حل کو بیان کرتے ہیں۔ جبکہ ایک الگورتھم defiاگر اعمال کا ہمیشہ ایک واضح مجموعہ ہوتا ہے جو کسی خاص مقصد کو حاصل کر سکتا ہے، تو ایک ماڈل حل کی اعلیٰ سطح کی وضاحت ہے۔ دو مختلف پروگراموں پر لاگو ایک ہی ماڈل کا کوڈ مختلف ہو سکتا ہے۔

ایک مشابہہ بنانا چاہتے ہیں، ہم کھانا پکانے کی ترکیب کے بارے میں سوچ سکتے ہیں: دونوں میں ایک مقصد حاصل کرنے کے لیے واضح اقدامات ہوتے ہیں۔ تاہم، ایک ماڈل ایک پروجیکٹ کی طرح ہوتا ہے، جس کا آپ دیکھ سکتے ہیں کہ نتیجہ اور اس کی خصوصیات کیا ہیں، لیکن عمل درآمد کی درست ترتیب ہم پر منحصر ہے جو کوڈ لکھتے ہیں۔

ڈیزائن پیٹرن کس چیز سے بنا ہے؟

زیادہ تر نمونوں کو بہت رسمی طور پر بیان کیا گیا ہے تاکہ لوگ انہیں کئی حوالوں سے دوبارہ پیش کر سکیں۔ آئیے ذیل میں ان عناصر کو دیکھتے ہیں جو ماڈل کی تفصیل میں موجود ہیں:

  • ارادہ ماڈل کا مختصراً مسئلہ اور حل دونوں کو بیان کرتا ہے۔
  • حوصلہ افزائی اس مسئلے اور حل کی مزید وضاحت کرتا ہے جسے ماڈل ممکن بناتا ہے۔
  • لا سٹرٹورا کلاسز ماڈل کے ہر حصے کو دکھاتا ہے اور یہ کہ وہ کیسے متعلق ہیں۔
  • کوڈ کی مثال سب سے مشہور پروگرامنگ زبانوں میں سے ایک ماڈل کے پیچھے خیال کو سمجھنا آسان بناتا ہے۔

انہیں کیوں استعمال کریں؟

ایک پروگرامر ڈیزائن پیٹرن کے وجود کو جانے بغیر سافٹ ویئر تیار کرسکتا ہے۔ بہت سے لوگ کرتے ہیں، اور اس وجہ سے وہ کچھ اسکیموں کو جانے بغیر نافذ کرتے ہیں۔ لیکن پھر ہم ان کو سیکھنے میں کیوں وقت گزاریں؟

  • ڈیزائن پیٹرن کی ایک کٹ ہیں کوشش کی اور تجربہ کیا حل سافٹ ویئر ڈیزائن میں عام مسائل کے لیے۔ یہاں تک کہ اگر آپ کو کبھی بھی ان مسائل کا سامنا نہیں کرنا پڑتا ہے، تب بھی نمونوں کو جاننا مفید ہے کیونکہ یہ آپ کو سکھاتا ہے کہ آبجیکٹ پر مبنی ڈیزائن کے اصولوں کو استعمال کرتے ہوئے ہر قسم کے مسائل کو کیسے حل کیا جائے۔
  • ڈیزائن کے ماڈلز defiوہ ایک مشترکہ زبان بناتے ہیں جسے آپ اور آپ کی ٹیم زیادہ مؤثر طریقے سے بات چیت کرنے کے لیے استعمال کر سکتے ہیں۔ آپ کہہ سکتے ہیں، "اوہ، ایسا کرنے کے لیے صرف سنگلٹن کا استعمال کریں،" اور ہر کوئی آپ کی تجویز کے پیچھے کا خیال سمجھ جائے گا۔ اگر آپ پیٹرن اور اس کا نام جانتے ہیں تو سنگلٹن کیا ہے اس کی وضاحت کرنے کی ضرورت نہیں ہے۔

ڈیزائن پیٹرن کی درجہ بندی

ڈیزائن کے پیٹرن پیچیدگی، تفصیل کی سطح، اور پورے ڈیزائن کردہ نظام میں لاگو ہونے کے پیمانے میں مختلف ہوتے ہیں۔

مشابہت کے لحاظ سے، ہم چند ٹریفک لائٹس لگا کر یا پیدل چلنے والوں کے لیے زیر زمین راستوں کے ساتھ ایک پورا ملٹی لیول انٹرچینج بنا کر ایک چوراہے کو محفوظ بنا سکتے ہیں۔

سب سے بنیادی، نچلی سطح کے ماڈل کو اکثر کہا جاتا ہے۔ محاورے . وہ عام طور پر صرف ایک پروگرامنگ زبان پر لاگو ہوتے ہیں۔

سب سے زیادہ عالمگیر اور اعلیٰ سطحی ماڈل ہیں۔ آرکیٹیکچرل ماڈلز . ڈویلپر ان نمونوں کو عملی طور پر کسی بھی زبان میں نافذ کر سکتے ہیں۔ دوسرے نمونوں کے برعکس، ان کا استعمال پورے ایپلیکیشن کے فن تعمیر کو ڈیزائن کرنے کے لیے کیا جا سکتا ہے۔

مزید برآں، تمام ماڈلز کو ان کے مطابق درجہ بندی کیا جا سکتا ہے۔ کوشش کی یا مقصد. تین اہم کلاسیں ہیں:

انوویشن نیوز لیٹر
جدت پر سب سے اہم خبروں کو مت چھوڑیں۔ ای میل کے ذریعے انہیں وصول کرنے کے لیے سائن اپ کریں۔
  • تخلیقی ماڈلز وہ آبجیکٹ بنانے کے طریقہ کار فراہم کرتے ہیں جو موجودہ کوڈ کے لچک اور دوبارہ استعمال میں اضافہ کرتے ہیں۔
  • ساختی ماڈلز وہ وضاحت کرتے ہیں کہ کس طرح اشیاء اور کلاسوں کو بڑے ڈھانچے میں جمع کرنا ہے، ان ڈھانچوں کو لچکدار اور موثر رکھتے ہوئے۔
  • طرز عمل کے ماڈلز وہ موثر مواصلت اور اشیاء کے درمیان ذمہ داریوں کی تفویض سے نمٹتے ہیں۔

Laravel میں ڈیزائن پیٹرن کی مثال: اگواڑا

چہرے ایک ساختی ڈیزائن پیٹرن ہے جو لائبریری، فریم ورک، یا کلاسوں کے کسی دوسرے پیچیدہ سیٹ کو ایک آسان انٹرفیس فراہم کرتا ہے۔

مسئلہ

آئیے فرض کریں کہ ہمیں سافٹ ویئر کو کام کرنے کی ضرورت ہے، جس کی بنیاد پر ایک نفیس لائبریری یا فریم ورک سے تعلق رکھنے والی اشیاء کی ایک بڑی سیٹ ہے۔ عام طور پر، ہمیں ان تمام اشیاء کو شروع کرنے، انحصار پر نظر رکھنے، طریقوں کو درست ترتیب میں چلانے، وغیرہ کی ضرورت ہوگی۔

نتیجے کے طور پر، کلاسوں کی کاروباری منطق تیسری پارٹی کی کلاسوں کے نفاذ کی تفصیلات کے ساتھ مضبوطی سے جڑ جائے گی، جس سے انہیں سمجھنا اور ان کا انتظام کرنا مشکل ہو جائے گا۔

سولوزیوین

ایک facade ایک کلاس ہے جو ایک پیچیدہ سب سسٹم کو ایک سادہ انٹرفیس فراہم کرتی ہے جس میں بہت سے متحرک حصے ہوتے ہیں۔ اے facade سب سسٹم کے ساتھ براہ راست کام کرنے کے مقابلے میں محدود فعالیت فراہم کر سکتا ہے۔ تاہم، اس میں صرف وہ خصوصیات شامل ہیں جن کا صارفین کو واقعی خیال ہے۔

ایک ہے facade یہ اس وقت مفید ہوتا ہے جب ہمیں ایپ کو ایک جدید ترین لائبریری کے ساتھ مربوط کرنے کی ضرورت ہوتی ہے جس میں درجنوں خصوصیات ہیں، لیکن ہمیں اس کی فعالیت کے صرف ایک چھوٹے سے حصے کی ضرورت ہوتی ہے۔

مثال کے طور پر، ایک ایپ جو سوشل میڈیا پر بلیوں کی خاصیت والی مختصر مضحکہ خیز ویڈیوز اپ لوڈ کرتی ہے، ممکنہ طور پر پیشہ ورانہ ویڈیو کنورژن لائبریری کا استعمال کر سکتی ہے۔ تاہم، ہمیں صرف ایک طریقہ کے ساتھ ایک کلاس کی ضرورت ہے۔ encode(filename, format). اس طرح کی کلاس بنانے اور اسے ویڈیو کنورژن لائبریری سے منسلک کرنے کے بعد، ہمارے پاس پہلی کلاس ہوگی۔ facade.

مثال کے طور پر، کال سنٹر کا ٹیلی فون آپریٹر اس طرح ہوتا ہے۔ facade. درحقیقت، جب ہم کسی اسٹور کی ٹیلی فون سروس کو ٹیلی فون آرڈر دینے کے لیے کال کرتے ہیں، تو ایک آپریٹر ہمارا ہوتا ہے۔ facade اسٹور کی تمام خدمات اور محکموں کی طرف۔ آپریٹر آرڈرنگ سسٹم، پیمنٹ گیٹ ویز اور مختلف ڈیلیوری سروسز کو ایک سادہ وائس انٹرفیس فراہم کرتا ہے۔

پی ایچ پی میں حقیقی مثال

اس بارے میں سوچو چہرے کچھ پیچیدہ سب سسٹمز کے لیے ایک سادہ اڈاپٹر کے طور پر۔ Facade ایک کلاس کے اندر پیچیدگی کو الگ کرتا ہے اور دوسرے ایپلیکیشن کوڈ کو سادہ انٹرفیس استعمال کرنے کی اجازت دیتا ہے۔

اس مثال میں، Facade کلائنٹ کوڈ سے YouTube 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 کے لیے تحفظ سے لے کر ردعمل اور بازیابی تک سب سے زیادہ جامع تعاون فراہم کرتا ہے۔

Veeam کی طرف سے Coveware سائبر بھتہ خوری کے واقعات کے ردعمل کی خدمات فراہم کرتا رہے گا۔ Coveware فرانزک اور تدارک کی صلاحیتیں پیش کرے گا…

اپریل 23 2024

سبز اور ڈیجیٹل انقلاب: کس طرح پیشین گوئی کی دیکھ بھال تیل اور گیس کی صنعت کو تبدیل کر رہی ہے

پیشن گوئی کی دیکھ بھال تیل اور گیس کے شعبے میں انقلاب برپا کر رہی ہے، پلانٹ کے انتظام کے لیے ایک جدید اور فعال نقطہ نظر کے ساتھ۔

اپریل 22 2024

UK کے عدم اعتماد کے ریگولیٹر نے GenAI پر BigTech کا الارم بڑھا دیا۔

UK CMA نے مصنوعی ذہانت کے بازار میں بگ ٹیک کے رویے کے بارے میں ایک انتباہ جاری کیا ہے۔ وہاں…

اپریل 18 2024

کاسا گرین: اٹلی میں پائیدار مستقبل کے لیے توانائی کا انقلاب

عمارتوں کی توانائی کی کارکردگی کو بڑھانے کے لیے یورپی یونین کی طرف سے تیار کردہ "گرین ہاؤسز" فرمان نے اپنے قانون سازی کے عمل کو اس کے ساتھ ختم کیا ہے…

اپریل 18 2024

اپنی زبان میں انوویشن پڑھیں

انوویشن نیوز لیٹر
جدت پر سب سے اہم خبروں کو مت چھوڑیں۔ ای میل کے ذریعے انہیں وصول کرنے کے لیے سائن اپ کریں۔

ہمارے ساتھ چلیے