আমি ধরে নিচ্ছি যে অধ্যবসায়ের জন্য আপনার বৈধতা প্রয়োজন।
কেবল দেখুনই নয়, মডেলটিকেও বৈধতা হ্যান্ডেল করা উচিত নয়। আইটি-র আমার দিনগুলিতে আমি বুঝতে পেরেছিলাম যে আপনি আসলে সঠিকভাবে কাজ করছেন, তা নিশ্চিত করার একটি উপায় ডিডিডি । ক্লাসগুলি আসলে কী হবে সে জন্য দায়বদ্ধ।
ডোমেন-চালিত ডিজাইন অনুসরণ করার সময়, আপনার মডেলগুলিতে আপনার ব্যবসায়ের যুক্তি অন্তর্ভুক্ত হয় এবং এটি এটি। তবে এগুলিতে বৈধতা অন্তর্ভুক্ত নয় কেন?
ধরে নেওয়া যাক আপনি নিজের ডোমেন স্তরটি Data Mapper
ধরে Active Record
রাখার পরিবর্তে আপনি ইতিমধ্যে ব্যবহার করছেন । তবে তবুও, আপনি চান মডেলগুলি বৈধ হওয়া উচিত, তাই আপনি নিজের মডেলটিতে বৈধতা যুক্ত করুন।
interface Validation
{
public function validate();
}
class ConcreteModel extends MyModel implements Validation
{
public function validate() { // the validation logic goes here }
}
বৈধতা যুক্তি নিশ্চিত করে, আপনি আপনার মাইএসকিউএল ডাটাবেসে মডেলটি সঠিকভাবে সন্নিবেশ করতে পারবেন ... কয়েক মাস যেতে হবে এবং আপনি সিদ্ধান্ত নেবেন, আপনি আপনার মডেলগুলি নোএসকিউএল ডাটাবেসে, ডাটাবেসগুলিতেও সংরক্ষণ করতে চান, যার জন্য মাইএসকিউএল-এর চেয়ে পৃথক বৈধতার বিধি প্রয়োজন।
তবে আপনার একটি সমস্যা রয়েছে, আপনার কাছে কেবলমাত্র 1 টি বৈধতা পদ্ধতি রয়েছে, তবে Model
এটি 2 টি ভিন্ন উপায়ে বৈধকরণ করতে হবে।
মডেলদের উচিত তারা যা করতে দায়বদ্ধ তা করা উচিত, তাদের আপনার ব্যবসায়ের যুক্তি যত্ন নেওয়া উচিত এবং এটি ভালভাবে করা উচিত। বৈধতা দৃistence়তার সাথে আবদ্ধ, ব্যবসায়িক যুক্তি নয়, সুতরাং বৈধতা কোনও মডেলের অন্তর্ভুক্ত নয় ।
Validator
এর পরিবর্তে আপনার তৈরি করা উচিত , যা তাদের নির্মাণকারীকে প্যারামিটার হিসাবে যাচাই করার জন্য একটি মডেল নেবে, Validation
ইন্টারফেসটি বাস্তবায়ন করবে এবং Validator
আপনার বিষয়গুলিকে বৈধতা দেওয়ার জন্য এইগুলি ব্যবহার করবে ।
interface Validation
{
public function validate();
}
class MySQLConcreteModelValidator implements Validation
{
public function __construct(ConcreteModel $model) { }
public function validate()
{
// you validate your model here
}
}
class RedisConcreteModelValidator implements Validation
{
public function __construct(ConcreteModel $model) { }
public function validate()
{
// you validate your model with different set of rules here
}
}
ভবিষ্যতে যে কোনও সময় আপনি যদি স্থির হয়ে থাকেন অন্য স্তরের জন্য অন্য বৈধতা পদ্ধতিটি যুক্ত করতে চান (তবে আপনি সিদ্ধান্ত নিয়েছিলেন যে রেডিস এবং মাইএসকিউএল আর যাওয়ার উপায় নয়), আপনি কেবল অন্যটি তৈরি করবেন Validator
এবং আপনার IoC
ধারকটিকে সঠিক উদাহরণটি ভিত্তিতে ব্যবহার করতে পারবেন আপনার এর উপর config
।