Flutter ডেভেলপমেন্ট ডিজাইন প্রিন্সিপাল?
Flutter আর্কিটেকচার মূলত রিঅ্যাকটিভ প্রোগ্রামিং নীতির উপর ভিত্তি করে তৈরি।
কম্পোজেবল উইজেট তৈরি করতে ফ্লাটার একটি রিঅ্যাকটিভ প্রোগ্রামিং মডেল ব্যবহার করে।
উইজেট হল ফ্লাটার অ্যাপ্লিকেশনের মৌলিক বিল্ডিং ব্লক যা একটি অ্যাপ্লিকেশনের ইউজার ইন্টারফেস তৈরি করতে ব্যবহৃত হয়।
Solid হল পাঁচটি ডিজাইন প্রিন্সিপালের সংক্ষিপ্ত রূপ যা রবার্ট সি. মার্টিন দ্বারা তৈরি করা হয়েছিল।
এই প্রিন্সিপালগুলো সফ্টওয়্যার ডেভেলপারদের আরও মেইনটেইনেবল বা রক্ষণাবেক্ষণযোগ্য সফ্টওয়্যার সিস্টেম তৈরিতে গাইড করার উদ্দেশ্যে তৈরি করা হয়েছে।
Solid মানে হল:
-Single Responsibility Principle
-Open-Close Principle
-Liskov Substitution Principle
-Interface Segregation Principle and
-Dependency Inversion Principle.


একটি ক্লাসের পরিবর্তনের জন্য শুধুমাত্র একটি কারণ থাকা উচিত। অন্য কথায়, একটি শ্রেণীর শুধুমাত্র একটি দায়িত্ব থাকা উচিত।
Flutter-এ SRP ব্যবহার করার জন্য, আপনার এমন ক্লাস তৈরি করা উচিত যেখানে শুধুমাত্র একটি দায়িত্ব আছে। এর মানে হল যে প্রতিটি ক্লাস একটি জিনিস ভাল করে করা উচিত।
উদাহরণস্বরূপ, আপনার যদি এমন একটি ক্লাস থাকে যা ইউজারের অথেন্টিকেশন পরিচালনা করে তবে এটি কেবলমাত্র ব্যবহারকারীর অথিন্টিকেশন-ই পরিচালনা করবে এবং অন্য কোন কিছু করবে না।

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

একটি সুপারক্লাসের অবজেক্টগুলি প্রোগ্রামের কারেক্টনেসকে ইফেক্ট না করেই তার সাবক্লাসের অবজেক্টের সাথে প্রতিস্থাপনযোগ্য হওয়া যাবে।
Flutter-এ LSP ব্যবহার করার জন্য, আপনাকে এমন সাবক্লাস তৈরি করতে হবে, যেগুলি তাদের পেরেন্ট ক্লাসের সাথে বিনিময়যোগ্যভাবে ব্যবহার করা যেতে পারে।
উদাহরণস্বরূপ, যদি আপনার কাছে Animal নামে একটি সুপারক্লাস এবং Dog নামে একটি সাবক্লাস থাকে, তাহলে আপনি যে কোনও জায়গায় একটি Dog অবজেক্ট ব্যবহার করতে পারবেন যেখানে একটি Animal Object প্রত্যাশিত।

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

Flutter ডেভেলাপমেন্ট ডিজাইনের এই প্রিন্সিপাল-টি বলে যে উচ্চ-স্তরের মডিউলগুলি নিম্ন-স্তরের মডিউলের উপর নির্ভর করা উচিত নয়। উভয় অ্যাবস্ট্টাকশনের উপর নির্ভর করা উচিত. কোন অ্যাবস্টাক বিবরণের উপর নির্ভর করা উচিত নয়। ডেসক্রিপশনের ক্ষেত্রে অ্যাবস্ট্রাকশনের উপর নির্ভর করা উচিত।
ফ্লাটারে DIP ব্যবহার করার জন্য, আপনাকে Concrete ইমপ্লিমেন্টেশনের পরিবর্তে অ্যাবস্ট্রাকশনের উপর নির্ভর করতে হবে। এর মানে হল যে উচ্চ-স্তরের মডিউলগুলি নিম্ন-স্তরের মডিউলগুলির উপর নির্ভর করবে না।
উদাহরণস্বরূপ, যদি আপনার একটি ক্লাস থাকে যা একটি ডাটাবেস থেকে ডেটা অ্যাক্সেস করতে হবে, তবে এটি ডাটাবেসের একটি নির্দিষ্ট বাস্তবায়নের পরিবর্তে একটি অ্যাবস্ট্রাক ডেটা সোর্সের ইন্টারফেসের উপর নির্ভর করবে।
মূলত এই ৫ টি ডিজাইন প্রিন্সিপাল আপনি একজন ফ্লাটার ডেভেলপার হিসেবে মেনে চলতে হবে।
Comments
Post a Comment