গ্রাহকের অর্থপ্রদান প্রক্রিয়া করার জন্য আমার একটি ক্লাস ব্যবহৃত হয়েছে। এই ক্লাসের একটি পদ্ধতি ছাড়াও প্রতিটি গ্রাহকের জন্য একই, গণনা করা এমন এক ব্যতীত (উদাহরণস্বরূপ) গ্রাহকের ব্যবহারকারীর কত .ণী এটি গ্রাহক থেকে গ্রাহক পর্যন্ত ব্যাপকভাবে পরিবর্তিত হতে পারে এবং কোনও বৈশিষ্ট্য ফাইলের মতো কোনও ক্ষেত্রে গণনার যুক্তি ক্যাপচার করার কোনও সহজ উপায় নেই, কারণ এতে অনেকগুলি কাস্টম ফ্যাক্টর থাকতে পারে।
আমি কুরুচিপূর্ণ কোড লিখতে পারি যা গ্রাহক আইডি এর উপর ভিত্তি করে স্যুইচ করে:
switch(customerID) {
case 101:
.. do calculations for customer 101
case 102:
.. do calculations for customer 102
case 103:
.. do calculations for customer 103
etc
}
তবে এর জন্য প্রতিবার নতুন গ্রাহক পেলে ক্লাসটি পুনর্নির্মাণ করা দরকার। এর চেয়ে ভাল উপায় কী?
[সম্পাদনা] "সদৃশ" নিবন্ধটি সম্পূর্ণ আলাদা। আমি কীভাবে একটি স্যুইচ স্টেটমেন্ট এড়ানো যায় তা জিজ্ঞাসা করছি না , আমি এই ক্ষেত্রে সবচেয়ে ভাল প্রযোজ্য আধুনিক ডিজাইনের জন্য জিজ্ঞাসা করছি - যা আমি ডাইনোসর কোডটি লিখতে চাইলে একটি স্যুইচ বিবৃতি দিয়ে সমাধান করতে পারি। সেখানে প্রদত্ত উদাহরণগুলি জেনেরিক এবং সহায়ক নয়, কারণ তারা মূলত বলে যে "আরে, কিছু ক্ষেত্রে স্যুইচটি বেশ ভাল কাজ করে, অন্য কোনও ক্ষেত্রে নয়।"
[সম্পাদনা] আমি নিম্নলিখিত কারণে শীর্ষ স্থানের উত্তর নিয়ে যাওয়ার সিদ্ধান্ত নিয়েছি (প্রতিটি গ্রাহকের জন্য একটি পৃথক "গ্রাহক" শ্রেণি তৈরি করা যা একটি স্ট্যান্ডার্ড ইন্টারফেস প্রয়োগ করে):
ধারাবাহিকতা: আমি এমন একটি ইন্টারফেস তৈরি করতে পারি যা নিশ্চিত করে যে সমস্ত গ্রাহক শ্রেণি একই আউটপুট গ্রহণ করে এবং ফেরত দেয়, এমনকি অন্য বিকাশকারী দ্বারা তৈরি করা হলেও
রক্ষণাবেক্ষণযোগ্যতা: সমস্ত কোড একই ভাষায় (জাভা) লিখিত হয় তাই মৃত-সরল বৈশিষ্ট্যটি কী হওয়া উচিত তা বজায় রাখতে অন্য কারও জন্য আলাদা কোডিং ভাষা শেখার দরকার নেই।
পুনঃব্যবহার: কোডে যদি একইরকম সমস্যা দেখা দেয় তবে আমি কাস্টম শ্রেণিকে পুনরায় ব্যবহার করতে পারি "কাস্টম" যুক্তি বাস্তবায়নের জন্য অনেকগুলি পদ্ধতি অবলম্বন করতে।
পরিচিতি: আমি কীভাবে এটি করতে হবে তা ইতিমধ্যে আমি জানি, তাই আমি এটি দ্রুত সম্পন্ন করতে এবং অন্যান্য টিপতে আরও চাপ দিতে পারি।
অপূর্ণতা:
প্রতিটি নতুন গ্রাহকের জন্য নতুন গ্রাহক শ্রেণীর একটি সংকলন প্রয়োজন, যা আমরা কীভাবে পরিবর্তনগুলি সংকলন ও স্থাপন করি তাতে কিছুটা জটিলতা যুক্ত করতে পারে।
প্রতিটি নতুন গ্রাহক একটি বিকাশকারী দ্বারা যুক্ত করতে হবে - একটি সমর্থন ব্যক্তি কেবল একটি সম্পত্তি ফাইল হিসাবে কিছু যুক্তি যুক্ত করতে পারবেন না। এটি আদর্শ নয় ... তবে আমি তখনও নিশ্চিত ছিলাম না যে কোনও সমর্থনকারী ব্যক্তি প্রয়োজনীয় ব্যবসায়িক যুক্তিটি কীভাবে লিখতে সক্ষম হবেন, বিশেষত যদি এটি অনেকগুলি ব্যতিক্রম (যেমন সম্ভবত সম্ভাব্য) জটিল হয়।
আমরা অনেক, অনেক নতুন গ্রাহক যুক্ত করলে এটি ভাল স্কেল হবে না। এটি প্রত্যাশিত নয়, তবে যদি এটি ঘটে তবে আমাদের কোডের অন্যান্য অনেকগুলি অংশ এবং সেই সাথে আবারও চিন্তা করতে হবে।
আপনার আগ্রহীদের জন্য, আপনি নাম দ্বারা কোনও শ্রেণিতে কল করতে জাভা প্রতিবিম্ব ব্যবহার করতে পারেন:
Payment payment = getPaymentFromSomewhere();
try {
String nameOfCustomClass = propertiesFile.get("customClassName");
Class<?> cpp = Class.forName(nameOfCustomClass);
CustomPaymentProcess pp = (CustomPaymentProcess) cpp.newInstance();
payment = pp.processPayment(payment);
} catch (Exception e) {
//handle the various exceptions
}
doSomethingElseWithThePayment(payment);