SOLID میں اصولوں کا اطلاق Flutter: مثالیں اور بہترین طرز عمل

Single Responsibility Principle(SRP)

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

مثال: صارف کی معلومات ظاہر کرنے کے لیے ایک ویجیٹ اور پوسٹس کی فہرست ظاہر کرنے کے لیے الگ ویجیٹ بنائیں۔

class UserProfileWidget extends StatelessWidget {  
  // Logic to display user information  
}  
  
class PostListWidget extends StatelessWidget {  
  // Logic to display a list of posts  
}  

Open/Closed Principle(OCP)

یہ اصول موجودہ کوڈ میں ترمیم کرنے کے بجائے نیا کوڈ شامل کرکے فعالیت کو بڑھانے کی حوصلہ افزائی کرتا ہے۔

مثال: ای کامرس ایپ میں مختلف قسم کے پروڈکٹس ڈسپلے کرنے کے لیے ایک ویجیٹ بنائیں۔

abstract class ProductWidget extends StatelessWidget {  
  // Common logic for displaying products  
}  
  
class ElectronicProductWidget extends ProductWidget {  
  // Logic to display electronic products  
}  
  
class ClothingProductWidget extends ProductWidget {  
  // Logic to display clothing products  
}  

Liskov Substitution Principle(LSP)

یہ اصول اس بات پر زور دیتا ہے کہ اخذ شدہ کلاس کی اشیاء کو پروگرام کی درستگی کو متاثر کیے بغیر بیس کلاس کی اشیاء کے لیے متبادل ہونا چاہیے۔

مثال: جیومیٹرک شکلوں کا نظم کرنے کے لیے ایک ویجیٹ بنائیں۔

abstract class ShapeWidget extends StatelessWidget {  
  // Common logic for displaying shapes  
}  
  
class RectangleWidget extends ShapeWidget {  
  // Logic to display rectangles  
}  
  
class CircleWidget extends ShapeWidget {  
  // Logic to display circles  
}  

Interface Segregation Principle(ISP)

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

مثال: ڈیٹا کو اپ ڈیٹ کرنے اور ڈسپلے کرنے کے لیے انٹرفیس۔

abstract class Updateable {  
  void update();  
}  
  
abstract class Displayable {  
  void display();  
}  

Dependency Inversion Principle(DIP)

یہ اصول انحصار کو منظم کرنے کے لئے انحصار انجیکشن کا استعمال کرنے کی تجویز کرتا ہے۔

مثال: وجیٹس میں انحصار کو منظم کرنے کے لیے انحصار انجکشن کا استعمال کریں۔

class OrderProcessor {  
  final DBConnection _dbConnection;  
  final EmailService _emailService;  
  
  OrderProcessor(this._dbConnection, this._emailService);  
}  

یاد رکھیں کہ SOLID میں اصولوں کو لاگو کرنا آپ کے پروجیکٹ کے مخصوص مقصد اور اور Flutter کے بارے میں آپ کی سمجھ کی بنیاد پر لچکدار طریقے سے ہونا چاہیے ۔ SOLID Flutter