এই জাতীয় সমস্যার জন্য মার্টিন ফোলার প্রস্তাবিত স্পেসিফিকেশন প্যাটার্ন :
... নকশার প্যাটার্ন, যার মাধ্যমে ব্যবসায়ের নিয়মগুলি বুলিয়ান যুক্তি ব্যবহার করে একসাথে ব্যবসায়ের নিয়মগুলি শৃঙ্খলাবদ্ধ করে পুনর্বিন্যাস করা যেতে পারে।
একটি স্পেসিফিকেশন প্যাটার্ন এমন ব্যবসায়িক নিয়মের রূপরেখা দেয় যা অন্য ব্যবসার বিধিগুলির সাথে সম্মিলিত। এই প্যাটার্নে, ব্যবসায় যুক্তিগুলির একটি ইউনিট বিমূর্ত সমষ্টিগত সংমিশ্রণ নির্দিষ্টকরণ শ্রেণি থেকে তার কার্যকারিতা উত্তরাধিকার সূত্রে পায়। কম্পোজিট স্পেসিফিকেশন ক্লাসে ইসস্যাটিসফাইডবি নামে একটি ফাংশন রয়েছে যা একটি বুলিয়ান মান দেয়। তাত্ক্ষণিকতার পরে, স্পেসিফিকেশনটিকে অন্যান্য স্পেসিফিকেশনের সাথে "বেঁধে রাখা" করা হয়, নতুন স্পেসিফিকেশনগুলি সহজেই বজায় রাখা যায়, তবুও অত্যন্ত স্বনির্ধারিত ব্যবসায়িক যুক্তি তৈরি করে। তদ্ব্যতীতকরণের পরে ব্যবসায়ের যুক্তি, পদ্ধতি আহ্বান বা নিয়ন্ত্রণের বিপরীতকরণের মাধ্যমে, তার রাষ্ট্রকে পরিবর্তিত করতে পারে যাতে অবিচলিত সংগ্রহস্থলের মতো অন্যান্য শ্রেণির প্রতিনিধি হয়ে যায় ...
উপরে কিছুটা উচ্চ ব্রাউন্ড শোনায় (কমপক্ষে আমার কাছে) তবে যখন আমি আমার কোডটিতে এটি চেষ্টা করেছি তখন এটি বেশ সাবলীলভাবে চলে গেছে এবং কার্যকর করা এবং পড়া সহজ হয়ে যায়।
আমি এটি যেভাবে দেখছি, মূল ধারণাটি "নিষ্কাশন" কোড যা ডেডিকেটেড পদ্ধতি (গুলি) / অবজেক্টগুলিতে চেক করে।
আপনার netWorth
উদাহরণ সহ, এটি নিম্নলিখিত হিসাবে সন্ধান করতে পারে:
int netWorth(Person* person) {
if (isSatisfiedBySpec(person)) {
return person->assets - person->liabilities;
}
log("person doesn't satisfy spec");
return -1;
}
#define BOOLEAN int // assuming C here
BOOLEAN isSatisfiedBySpec(Person* person) {
return Person != NULL
&& person->isAlive
&& person->assets != -1
&& person->liabilities != -1;
}
আপনার কেসটি বরং সহজ দেখা যাচ্ছে যাতে সমস্ত চেকগুলি একক পদ্ধতির মধ্যে একটি সরল তালিকার সাথে মানিয়ে যায় OK এটিকে আরও ভালভাবে পড়ার জন্য আমাকে প্রায়শই আরও পদ্ধতিতে বিভক্ত হতে হয়।
আমি সাধারণত একটি উত্সর্গীকৃত অবজেক্টে "স্পেক" সম্পর্কিত পদ্ধতিগুলি গ্রুপ / এক্সট্রাক্ট করি, যদিও আপনার কেসটি এটি ছাড়াই ঠিক আছে।
// ...
Specification s, *spec = initialize(s, person);
if (spec->isSatisfied()) {
return person->assets - person->liabilities;
}
log("person doesn't satisfy spec");
return -1;
// ...
: স্ট্যাক ওভারফ্লো এ এই প্রশ্নের উপরে উল্লিখিত এক ছাড়াও একটি কয়েক সংযোগগুলি বিশেষ পরামর্শ দেওয়া হচ্ছে
স্পেসিফিকেসন প্যাটার্ন উদাহরণ । বিশেষ করে, উত্তর সুপারিশ Dimecasts একটি উদাহরণ একটি, walkthrough জন্য 'নির্দিষ্টকরণ প্যাটার্ন শেখা' এবং উল্লেখ "উল্লেখ" কাগজ এরিক ইভান্স এবং মার্টিন জালিয়া দ্বারা রচনা ।