আমি একটি প্রকল্পে কাজ করছি যা অনুরোধগুলি প্রক্রিয়া করে, এবং অনুরোধের দুটি উপাদান রয়েছে: কমান্ড এবং পরামিতি। প্রতিটি কমান্ডের হ্যান্ডলারটি খুব সহজ (<10 টি লাইন, প্রায়শই <5)। কমপক্ষে 20 টি কমান্ড রয়েছে এবং সম্ভবত 50 এরও বেশি থাকবে।
আমি বেশ কয়েকটি সমাধান নিয়ে এসেছি:
- একটি বড় স্যুইচ / যদি-অন্য কমান্ডগুলিতে
- কমান্ড মানচিত্র
- অবিচলিত ক্লাস / সিঙ্গলটনে আদেশের মানচিত্র
প্রতিটি কমান্ডটি কিছুটা ত্রুটি পরীক্ষা করে এবং একমাত্র বিট যা বিমূর্ত করা যেতে পারে তা প্রতিটি কমান্ডের জন্য সংজ্ঞায়িত পরামিতিগুলির সংখ্যা পরীক্ষা করে।
এই সমস্যার সর্বোত্তম সমাধান কী হবে এবং কেন? আমি যে কোনও ডিজাইনের ধরণগুলি মিস করেছি তা সম্পর্কেও আমি উন্মুক্ত।
আমি প্রত্যেকের জন্য নিম্নলিখিত প্রো / কনস তালিকাটি নিয়ে এসেছি:
সুইচ
- অনুকূল
- সমস্ত আদেশ একটি ফাংশনে রাখে; যেহেতু তারা সহজ, এটি এটি একটি ভিজ্যুয়াল টেবিল তৈরি করে
- টোন ছোট ফাংশন / ক্লাস যা কেবলমাত্র এক জায়গায় ব্যবহার করা হবে তা নিয়ে উত্সাহিত করার দরকার নেই
- কনস
- খুব দীর্ঘ
- প্রোগ্রামক্রমে কমান্ড যুক্ত করা শক্ত (ডিফল্ট কেস ব্যবহার করে চেইন করা দরকার)
মানচিত্র কমান্ড -> ফাংশন
- অনুকূল
- ছোট, কামড়ের আকারের অংশগুলি
- প্রোগ্রাম যুক্তভাবে কমান্ডগুলি যুক্ত / অপসারণ করতে পারে
- কনস
- যদি লাইনটি সম্পন্ন হয় তবে স্যুইচ হিসাবে একইভাবে দৃশ্যমান
- যদি লাইনটি না করা হয় তবে প্রচুর ফাংশন কেবলমাত্র এক জায়গায় ব্যবহৃত হয়
মানচিত্র কমান্ড -> স্ট্যাটিক ক্লাস / সিঙ্গলটন
- অনুকূল
- সাধারণ ত্রুটি পরীক্ষা করা পরিচালনা করতে পলিমারফিজম ব্যবহার করতে পারে (কেবল 3 টি লাইনের মতো তবে এখনও)
- মানচিত্র -> ফাংশন সমাধানের অনুরূপ সুবিধাগুলি
- কনস
- প্রচুর খুব ছোট ক্লাস প্রকল্পের বিশৃঙ্খলা করবে
- বাস্তবায়ন সব একই জায়গায় নয়, তাই বাস্তবায়নগুলি স্ক্যান করা তত সহজ নয়
অতিরিক্ত নোট:
আমি এটি গোয়ে লিখছি, তবে আমি মনে করি না যে সমাধানটি ভাষা-নির্দিষ্ট। আমি আরও সাধারণ সমাধানের সন্ধান করছি কারণ অন্যান্য ভাষায় আমার খুব অনুরূপ কিছু করার প্রয়োজন হতে পারে।
কমান্ডটি একটি স্ট্রিং, তবে সুবিধাজনক হলে আমি সহজেই এটি একটি সংখ্যায় ম্যাপ করতে পারি। ফাংশনের স্বাক্ষর এমন কিছু:
Reply Command(List<String> params)
গো শীর্ষ স্তরের ফাংশন রয়েছে এবং অন্যান্য প্ল্যাটফর্মগুলির মধ্যে আমি শীর্ষ স্তরের ফাংশনগুলিও বিবেচনা করছি, সুতরাং দ্বিতীয় এবং তৃতীয় বিকল্পগুলির মধ্যে পার্থক্য রয়েছে।