আমাদের অ্যাপ্লিকেশনটির সোর্স কোডে আমাদের বেশ কয়েকটি জায়গা রয়েছে, যেখানে এক শ্রেণীর একই নাম এবং বিভিন্ন পরামিতি সহ অনেকগুলি পদ্ধতি রয়েছে। এই পদ্ধতিগুলিতে সর্বদা একটি 'পূর্ববর্তী' পদ্ধতির প্লাস আরও একটির সমস্ত পরামিতি থাকে।
এটি দীর্ঘ বিবর্তনের (উত্তরাধিকারের কোড) এবং এই চিন্তার (আমি বিশ্বাস করি) ফলাফল:
" একটি পদ্ধতি এম আছে যা এ। করে। আমার এ + বি করা দরকার OK ঠিক আছে, আমি জানি ... আমি এম তে একটি নতুন প্যারামিটার যুক্ত করব, তার জন্য একটি নতুন পদ্ধতি তৈরি করব, এম থেকে নতুন পদ্ধতিতে কোড সরান code আরও একটি প্যারামিটার সহ, সেখানে A + B করুন এবং নতুন প্যারামিটারের একটি ডিফল্ট মান সহ এম থেকে নতুন পদ্ধতিটি কল করুন ""
এখানে জাভা-জাতীয় ভাষায় একটি উদাহরণ দেওয়া হয়েছে:
class DocumentHome {
(...)
public Document createDocument(String name) {
// just calls another method with default value of its parameter
return createDocument(name, -1);
}
public Document createDocument(String name, int minPagesCount) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false);
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank) {
// just calls another method with default value of its parameter
return createDocument(name, minPagesCount, false, "");
}
public Document createDocument(String name, int minPagesCount, boolean firstPageBlank, String title) {
// here the real work gets done
(...)
}
(...)
}
আমার মনে হচ্ছে এটি ভুল। কেবল এটিই নয় যে আমরা চিরকাল এই জাতীয় নতুন পরামিতি যুক্ত করতে পারি না, তবে পদ্ধতির মধ্যে সমস্ত নির্ভরতার কারণে কোডটি প্রসারিত / পরিবর্তন করা শক্ত hard
এটি কীভাবে আরও ভাল করা যায় তা এখানে কয়েকটি উপায়:
একটি প্যারামিটার অবজেক্ট পরিচয় করিয়ে দিন:
class DocumentCreationParams { String name; int minPagesCount; boolean firstPageBlank; String title; (...) } class DokumentHome { public Document createDocument(DocumentCreationParams p) { // here the real work gets done (...) } }
DocumentHome
আমরা কল করার আগে অবজেক্টটিতে পরামিতিগুলি সেট করুনcreateDocument()
@In DocumentHome dh = null; (...) dh.setName(...); dh.setMinPagesCount(...); dh.setFirstPageBlank(...); Document newDocument = dh.createDocument();
কাজটি বিভিন্ন পদ্ধতিতে পৃথক করুন এবং প্রয়োজনীয় হিসাবে তাদের কল করুন:
@In DocumentHome dh = null; Document newDocument = dh.createDocument(); dh.changeName(newDocument, "name"); dh.addFirstBlankPage(newDocument); dh.changeMinPagesCount(new Document, 10);
আমার প্রশ্নগুলো:
- বর্ণিত সমস্যাটি কি আসলেই সমস্যা?
- প্রস্তাবিত সমাধানগুলি সম্পর্কে আপনার কী ধারণা? আপনি কোনটি পছন্দ করবেন (আপনার অভিজ্ঞতার ভিত্তিতে)?
- আপনি কি অন্য কোন সমাধান সম্পর্কে চিন্তা করতে পারেন?