যখন আমার কাছে প্রচুর ডেটা রয়েছে যা যাচাইকরণের প্রয়োজন, আমি কি বৈধতার একক উদ্দেশ্যে একটি নতুন ক্লাস তৈরি করব বা আমার পদ্ধতিটি বৈধতা অবলম্বন করা উচিত?
আমার বিশেষ উদাহরণটি একটি টুর্নামেন্ট এবং একটি ইভেন্ট / বিভাগ শ্রেণীর বিষয়ে বিবেচনা করে: Tournament
এবং Event
, কোন ক্রীড়া টুর্নামেন্টকে মডেল করে এবং প্রতিটি টুর্নামেন্টে এক বা একাধিক বিভাগ রয়েছে।
এই শ্রেণিতে বৈধতা পাওয়ার জন্য বিভিন্ন ধরণের জিনিস রয়েছে: প্লেয়ারগুলি খালি থাকতে হবে, অনন্য হওয়া উচিত, প্রতিটি খেলোয়াড়ের খেলাগুলির সংখ্যা, প্রতিটি ম্যাচের খেলোয়াড়ের সংখ্যা, পূর্বনির্ধারিত ম্যাচআপগুলি এবং আরও অনেক কিছু সহ সত্যই বড় একটি এসটেরা রয়েছে জটিল বিধি।
ক্লাসগুলি একে অপরের সাথে কীভাবে সংহত হয় তার মতো সামগ্রিকভাবে আমাকে বৈধতা দেওয়ার কিছু অংশও রয়েছে। উদাহরণস্বরূপ, একটির একক বৈধতা Player
কেবলমাত্র সূক্ষ্ম হতে পারে তবে কোনও ইভেন্টে যদি একই প্লেয়ার দু'বার থাকে তবে এটি বৈধতা ত্রুটি।
সুতরাং এটি সম্পর্কে কীভাবে ?: আমি আমার মডেল ক্লাসগুলির সেটারগুলি এবং ডেটা যুক্ত করতে অনুরূপ পদ্ধতিগুলি ব্যবহার করার সময় একেবারে কোনও প্রাক-চেক সম্পর্কে ভুলে গিয়েছি এবং পরিবর্তে আমি বৈধতা ক্লাসগুলিকে এটি পরিচালনা করতে দিই।
সুতরাং আমরা ভালো কিছু থাকবে EventValidator
একটি সঙ্গে Event
একজন সদস্য হিসাবে, এবং একটি validate()
পদ্ধতি যে সমগ্র বস্তু যাচাই, প্লাস একবচন পদ্ধতি সকল সদস্যদের 'নিয়ম যাচাই করতে।
তারপরে, একটি বৈধযোগ্য অবজেক্টটি ইনস্ট্যান্ট করার আগে, আমি অবৈধ মানগুলি রোধ করার জন্য বৈধকরণটি সম্পাদন করব।
আমার নকশা কি সঠিক? আমার কি অন্যভাবে কিছু করা উচিত?
এছাড়াও, আমি কি বুলিয়ান রিটার্নিং বৈধতা পদ্ধতিগুলি ব্যবহার করব? বা বৈধতা ব্যর্থ হলে কেবল একটি ব্যতিক্রম ছুঁড়ে? আমার কাছে মনে হয় সবচেয়ে ভাল বিকল্প হ'ল বুলিয়ান রিটার্নিং পদ্ধতিগুলি এবং যখন অবজেক্টটি ইনস্ট্যান্ট করা হবে তখন ব্যতিক্রম ছুঁড়ে ফেলবে, উদাহরণস্বরূপ:
public Event() {
EventValidator eventValidator = new EventValidator(this);
if (!eventValidator.validate()) {
// show error messages with methods defined in the validator
throw new Exception(); // what type of exception would be best? should I create custom ones?
}
}