আমি একটি সার্লেট লিখতে চেষ্টা করছি যা "ক্রিয়া" মানের উপর ভিত্তি করে টাস্ক করে এটি ইনপুট হিসাবে প্রেরণ করে।
যার নমুনা এখানে দেওয়া হল
public class SampleClass extends HttpServlet {
public static void action1() throws Exception{
//Do some actions
}
public static void action2() throws Exception{
//Do some actions
}
//And goes on till action9
public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {
String action = req.getParameter("action");
/**
* I find it difficult in the following ways
* 1. Too lengthy - was not comfortable to read
* 2. Makes me fear that action1 would run quicker as it was in the top
* and action9 would run with a bit delay - as it would cross check with all the above if & else if conditions
*/
if("action1".equals(action)) {
//do some 10 lines of action
} else if("action2".equals(action)) {
//do some action
} else if("action3".equals(action)) {
//do some action
} else if("action4".equals(action)) {
//do some action
} else if("action5".equals(action)) {
//do some action
} else if("action6".equals(action)) {
//do some action
} else if("action7".equals(action)) {
//do some action
} else if("action8".equals(action)) {
//do some action
} else if("action9".equals(action)) {
//do some action
}
/**
* So, the next approach i tried it with switch
* 1. Added each action as method and called those methods from the swith case statements
*/
switch(action) {
case "action1": action1();
break;
case "action2": action2();
break;
case "action3": action3();
break;
case "action4": action4();
break;
case "action5": action5();
break;
case "action6": action6();
break;
case "action7": action7();
break;
case "action8": action8();
break;
case "action9": action9();
break;
default:
break;
}
/**
* Still was not comfortable since i am doing un-necessary checks in one way or the other
* So tried with [reflection][1] by invoking the action methods
*/
Map<String, Method> methodMap = new HashMap<String, Method>();
methodMap.put("action1", SampleClass.class.getMethod("action1"));
methodMap.put("action2", SampleClass.class.getMethod("action2"));
methodMap.get(action).invoke(null);
/**
* But i am afraid of the following things while using reflection
* 1. One is Security (Could any variable or methods despite its access specifier) - is reflection advised to use here?
* 2. Reflection takes too much time than simple if else
*/
}
}
আমার কেবলমাত্র আরও অনেকের হাত থেকে বাঁচতে হবে যদি / অন্যথায় - আরও ভাল পাঠযোগ্যতার জন্য এবং আরও ভাল কোড রক্ষণাবেক্ষণের জন্য আমার কোডটিতে চেক করা হয়। সুতরাং অন্যান্য বিকল্পের জন্য চেষ্টা করে
1. স্যুইচ কেস - এখনও আমার ক্রিয়াটি করার আগে এটি অনেক বেশি চেক করে
2. প্রতিবিম্ব
i] একটি প্রধান বিষয় সুরক্ষা - যা আমাকে ক্লাসের মধ্যে এমনকি অ্যাক্সেস সুনির্দিষ্ট সত্ত্বেও ভেরিয়েবল এবং পদ্ধতিগুলি অ্যাক্সেস করতে দেয় - আমি নিশ্চিত নই যে আবহাওয়া আমি আমার কোডটিতে এটি ব্যবহার করতে পারি
ii] এবং অন্যটি হ'ল যদি / অন্য-যদি চেক হয় তবে এটি সাধারণের চেয়ে বেশি সময় নেয়
উপরের কোডটি আরও ভাল উপায়ে সাজানোর পরামর্শ দেওয়ার মতো আরও ভাল কোনও পদ্ধতির বা আরও ভাল ডিজাইন রয়েছে কি?
সম্পাদিত
আমি যোগ করেছি উত্তর উপরে স্নিপেট বিবেচনা করার জন্য উত্তর নিচে ।
কিন্তু তবুও, "এক্সিকিউটারএ" এবং "এক্সিকিউটারবি" নিম্নলিখিত ক্লাসগুলি কোডের কয়েকটি লাইন করে। এটি একটি পদ্ধতি হিসাবে যুক্ত করার চেয়ে তাদের শ্রেণি হিসাবে যুক্ত করা কি ভাল অনুশীলন? এই বিষয়ে পরামর্শ করুন।