প্রবন্ধ

নকশার ধরণগুলি কী: কেন সেগুলি ব্যবহার করুন, শ্রেণিবিন্যাস, সুবিধা এবং অসুবিধা

সফ্টওয়্যার ইঞ্জিনিয়ারিং-এ, ডিজাইন প্যাটার্নগুলি সাধারণত সফ্টওয়্যার ডিজাইনে ঘটে যাওয়া সমস্যার সর্বোত্তম সমাধান।

এগুলি পূর্ব প্রকল্পের মতোdefinite, চেষ্টা করা এবং পরীক্ষিত সরঞ্জাম যা আপনি আপনার কোডে একটি পুনরাবৃত্ত নকশা সমস্যা সমাধান করতে কাস্টমাইজ করতে পারেন।

পড়ার আনুমানিক সময়: 6 minuti

একটি ডিজাইন প্যাটার্ন কি

একটি ডিজাইন প্যাটার্ন এমন কোড নয় যা আমরা আমাদের প্রোগ্রামে কপি করে সন্নিবেশ করতে পারি, যেমনটি আমরা স্ট্যান্ডার্ড ফাংশন বা লাইব্রেরির সাথে করতে পারি। ডিজাইন প্যাটার্ন একটি সাধারণ ধারণা যা একটি নির্দিষ্ট সমস্যা সমাধান করতে সক্ষম। মূলত একটি মডেল যার বিবরণ আমরা অনুসরণ করতে পারি এবং একটি সমাধান বাস্তবায়ন করতে পারি যা আমাদের প্রোগ্রামের বাস্তবতার সাথে খাপ খায়।

মডেলগুলি প্রায়শই অ্যালগরিদমের সাথে বিভ্রান্ত হয়, কারণ উভয় ধারণাই কিছু পরিচিত সমস্যার সাধারণ সমাধান বর্ণনা করে। একটি অ্যালগরিদম যখন defiযদি সর্বদা একটি নির্দিষ্ট লক্ষ্য অর্জন করতে পারে এমন কর্মের একটি সুস্পষ্ট সেট থাকে তবে একটি মডেল হল একটি সমাধানের উচ্চ স্তরের বর্ণনা। দুটি ভিন্ন প্রোগ্রামে প্রয়োগ করা একই মডেল থেকে কোড ভিন্ন হতে পারে।

একটি উপমা তৈরি করতে চাই, আমরা একটি রান্নার রেসিপির কথা ভাবতে পারি: লক্ষ্য অর্জনের জন্য উভয়েরই স্পষ্ট পদক্ষেপ রয়েছে। যাইহোক, একটি মডেল একটি প্রকল্পের মত, যার ফলাফল এবং এর বৈশিষ্ট্যগুলি আপনি দেখতে পারেন, তবে বাস্তবায়নের সঠিক ক্রমটি আমাদের উপর নির্ভর করে যারা কোডটি লেখেন।

ডিজাইন প্যাটার্ন কি দিয়ে তৈরি?

বেশিরভাগ নিদর্শনগুলি খুব আনুষ্ঠানিকভাবে বর্ণনা করা হয়েছে যাতে লোকেরা তাদের অনেক প্রসঙ্গে পুনরুত্পাদন করতে পারে। একটি মডেলের বর্ণনায় উপস্থিত উপাদানগুলি নীচে দেখা যাক:

  • অভিপ্রায় মডেলটি সংক্ষিপ্তভাবে সমস্যা এবং সমাধান উভয়ই বর্ণনা করে।
  • প্রেরণা আরও সমস্যা এবং সমাধান ব্যাখ্যা করে যা মডেলটি সম্ভব করে।
  • কাঠামো ক্লাসের মডেলের প্রতিটি অংশ এবং তারা কীভাবে সম্পর্কিত তা দেখায়।
  • কোড উদাহরণ সবচেয়ে জনপ্রিয় প্রোগ্রামিং ল্যাঙ্গুয়েজগুলির একটিতে মডেলটির পিছনের ধারণাটি বোঝা সহজ করে তোলে।

কেন তাদের ব্যবহার?

একজন প্রোগ্রামার ডিজাইন প্যাটার্নের অস্তিত্ব না জেনেই সফটওয়্যার তৈরি করতে পারে। অনেকে করে, এবং এই কারণে তারা না জেনেই কিছু পরিকল্পনা বাস্তবায়ন করে। কিন্তু তাহলে কেন আমরা তাদের শেখার জন্য সময় ব্যয় করব?

  • নকশা নিদর্শন একটি কিট চেষ্টা এবং পরীক্ষিত সমাধান সফ্টওয়্যার ডিজাইনের সাধারণ সমস্যার জন্য। এমনকি যদি আপনি এই সমস্যার সম্মুখীন না হন, তবুও প্যাটার্নগুলি জানা এখনও দরকারী কারণ এটি আপনাকে শেখায় কিভাবে অবজেক্ট-ওরিয়েন্টেড ডিজাইন নীতিগুলি ব্যবহার করে সমস্ত ধরণের সমস্যা সমাধান করা যায়৷
  • নকশা মডেল defiতারা একটি সাধারণ ভাষা তৈরি করে যা আপনি এবং আপনার দল আরও কার্যকরভাবে যোগাযোগ করতে ব্যবহার করতে পারেন। আপনি বলতে পারেন, "ওহ, এটি করার জন্য শুধুমাত্র একটি সিঙ্গেলটন ব্যবহার করুন," এবং সবাই আপনার পরামর্শের পিছনে ধারণাটি বুঝতে পারবে। যদি আপনি প্যাটার্ন এবং এর নাম জানেন তবে সিঙ্গলটন কী তা ব্যাখ্যা করার দরকার নেই।

ডিজাইন প্যাটার্নের শ্রেণীবিভাগ

ডিজাইন প্যাটার্নগুলি ডিজাইন করা সিস্টেম জুড়ে জটিলতা, বিশদ স্তর এবং প্রযোজ্যতার স্কেলগুলিতে পৃথক হয়।

সাদৃশ্য অনুসারে, আমরা কয়েকটি ট্র্যাফিক লাইট ইনস্টল করে বা পথচারীদের জন্য ভূগর্ভস্থ প্যাসেজের সাথে একটি সম্পূর্ণ মাল্টিলেভেল ইন্টারচেঞ্জ তৈরি করে একটি ইন্টারসেকশনকে নিরাপদ করতে পারি।

সবচেয়ে মৌলিক, নিম্ন-স্তরের মডেলগুলিকে প্রায়ই বলা হয় idioms . তারা সাধারণত শুধুমাত্র একটি একক প্রোগ্রামিং ভাষার জন্য প্রযোজ্য।

সবচেয়ে সার্বজনীন এবং উচ্চ স্তরের মডেল হয় স্থাপত্য মডেল . বিকাশকারীরা এই নিদর্শনগুলি কার্যত যে কোনও ভাষায় প্রয়োগ করতে পারে। অন্যান্য নিদর্শন থেকে ভিন্ন, তারা একটি সম্পূর্ণ অ্যাপ্লিকেশনের আর্কিটেকচার ডিজাইন করতে ব্যবহার করা যেতে পারে।

উপরন্তু, সমস্ত মডেল তাদের অনুযায়ী শ্রেণীবদ্ধ করা যেতে পারে চেষ্টা বা উদ্দেশ্য। তিনটি প্রধান শ্রেণী হল:

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.
  • সৃজনশীল মডেল তারা অবজেক্ট তৈরির প্রক্রিয়া প্রদান করে যা বিদ্যমান কোডের নমনীয়তা এবং পুনঃব্যবহার বাড়ায়।
  • স্ট্রাকচারাল মডেল তারা ব্যাখ্যা করে কিভাবে বস্তু এবং শ্রেণীগুলিকে বৃহত্তর কাঠামোতে একত্রিত করা যায়, এই কাঠামোগুলিকে নমনীয় এবং দক্ষ রেখে।
  • আচরণগত মডেল তারা বস্তুর মধ্যে কার্যকর যোগাযোগ এবং দায়িত্বের বরাদ্দ নিয়ে কাজ করে।

লারাভেলে ডিজাইন প্যাটার্নের উদাহরণ: ফ্যাকাড

অট্টালিকার সদরের বহির্ভাগ একটি স্ট্রাকচারাল ডিজাইন প্যাটার্ন যা একটি লাইব্রেরি, ফ্রেমওয়ার্ক বা ক্লাসের অন্য কোনো জটিল সেটে একটি সরলীকৃত ইন্টারফেস প্রদান করে।

সমস্যা

ধরুন আমাদের সফ্টওয়্যার কাজ করতে হবে, একটি অত্যাধুনিক লাইব্রেরি বা কাঠামোর অন্তর্গত একটি বড় সেটের উপর ভিত্তি করে। সাধারণত, আমাদের এই সমস্ত অবজেক্ট শুরু করতে হবে, নির্ভরতাগুলির ট্র্যাক রাখতে হবে, সঠিক ক্রমে পদ্ধতিগুলি চালাতে হবে ইত্যাদি।

ফলস্বরূপ, ক্লাসের ব্যবসায়িক যুক্তি তৃতীয় পক্ষের ক্লাসের বাস্তবায়নের বিবরণের সাথে শক্তভাবে মিলিত হবে, তাদের বোঝা এবং পরিচালনা করা কঠিন করে তুলবে।

সমাধান

উনা facade একটি ক্লাস যা একটি জটিল সাবসিস্টেমের একটি সাধারণ ইন্টারফেস প্রদান করে যাতে অনেকগুলি চলমান অংশ থাকে। ক facade সাবসিস্টেমের সাথে সরাসরি কাজ করার তুলনায় সীমিত কার্যকারিতা প্রদান করতে পারে। যাইহোক, এটি শুধুমাত্র সেই বৈশিষ্ট্যগুলিকে অন্তর্ভুক্ত করে যা গ্রাহকরা সত্যিই যত্নশীল।

এক আছে facade এটি উপযোগী হয় যখন আমাদের একটি অত্যাধুনিক লাইব্রেরির সাথে অ্যাপটিকে সংহত করতে হয় যাতে কয়েক ডজন বৈশিষ্ট্য রয়েছে, কিন্তু আমাদের শুধুমাত্র এর কার্যকারিতার একটি ছোট অংশের প্রয়োজন।

উদাহরণস্বরূপ, সোশ্যাল মিডিয়াতে বিড়ালের সাথে ছোট মজার ভিডিও আপলোড করে এমন একটি অ্যাপ সম্ভবত একটি পেশাদার ভিডিও রূপান্তর লাইব্রেরি ব্যবহার করতে পারে। যাইহোক, আমাদের যা দরকার তা হল একক পদ্ধতি সহ একটি ক্লাস encode(filename, format). এই ধরনের একটি ক্লাস তৈরি করে ভিডিও কনভার্সন লাইব্রেরির সাথে সংযুক্ত করার পর, আমাদের প্রথমটি থাকবে facade.

উদাহরণস্বরূপ, একটি কল সেন্টারের টেলিফোন অপারেটর একটি মত facade. আসলে, আমরা যখন একটি দোকানের টেলিফোন পরিষেবাকে টেলিফোন অর্ডার দেওয়ার জন্য কল করি, তখন একজন অপারেটর আমাদের facade দোকানের সমস্ত পরিষেবা এবং বিভাগের দিকে। অপারেটর অর্ডারিং সিস্টেম, পেমেন্ট গেটওয়ে এবং বিভিন্ন ডেলিভারি পরিষেবাগুলিতে একটি সাধারণ ভয়েস ইন্টারফেস প্রদান করে।

পিএইচপি বাস্তব উদাহরণ

ভাবো অট্টালিকার সদরের বহির্ভাগ কিছু জটিল সাবসিস্টেমের জন্য একটি সাধারণ অ্যাডাপ্টার হিসাবে। Facade একটি একক শ্রেণীর মধ্যে জটিলতা বিচ্ছিন্ন করে এবং অন্যান্য অ্যাপ্লিকেশন কোডকে সাধারণ ইন্টারফেস ব্যবহার করার অনুমতি দেয়।

এই উদাহরণে, Facade ক্লায়েন্ট কোড থেকে YouTube API এবং FFmpeg লাইব্রেরির জটিলতা লুকিয়ে রাখে। কয়েক ডজন ক্লাসের সাথে কাজ করার পরিবর্তে, ক্লায়েন্ট ফ্যাকেডে একটি সহজ পদ্ধতি ব্যবহার করে।

<?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 সর্বাধিক ব্যাপক সমর্থন বৈশিষ্ট্যযুক্ত

Veeam-এর কভওয়্যার সাইবার চাঁদাবাজি ঘটনার প্রতিক্রিয়া পরিষেবা প্রদান করতে থাকবে। Coveware ফরেনসিক এবং প্রতিকার ক্ষমতা প্রদান করবে...

23 এপ্রিল 2024

সবুজ এবং ডিজিটাল বিপ্লব: কীভাবে ভবিষ্যদ্বাণীমূলক রক্ষণাবেক্ষণ তেল ও গ্যাস শিল্পকে রূপান্তরিত করছে

ভবিষ্যদ্বাণীমূলক রক্ষণাবেক্ষণ তেল ও গ্যাস খাতে বিপ্লব ঘটাচ্ছে, উদ্ভিদ ব্যবস্থাপনায় একটি উদ্ভাবনী এবং সক্রিয় পদ্ধতির সাথে।…

22 এপ্রিল 2024

ইউকে অ্যান্টিট্রাস্ট নিয়ন্ত্রক GenAI এর উপর BigTech এলার্ম উত্থাপন করেছে

ইউকে সিএমএ কৃত্রিম বুদ্ধিমত্তার বাজারে বিগ টেকের আচরণ সম্পর্কে একটি সতর্কতা জারি করেছে। সেখানে…

18 এপ্রিল 2024

কাসা গ্রিন: ইতালিতে টেকসই ভবিষ্যতের জন্য শক্তি বিপ্লব

ভবনগুলির শক্তি দক্ষতা বাড়ানোর জন্য ইউরোপীয় ইউনিয়ন দ্বারা প্রণয়ন করা "গ্রিন হাউস" ডিক্রি, এর আইনী প্রক্রিয়া শেষ করেছে...

18 এপ্রিল 2024

আপনার ভাষায় উদ্ভাবন পড়ুন

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

আমাদের অনুসরণ