আমি বর্তমানে আমার বর্তমান প্রকল্পে একক বিকাশকারী হিসাবে কাজ করছি। আমি প্রকল্পটি অন্য বিকাশকারীর কাছ থেকে উত্তরাধিকার সূত্রে পেয়েছি, যিনি তখন থেকে সংস্থাটি ছেড়ে চলে এসেছেন। এটি সি # তে একটি মডেল-দর্শন-নিয়ন্ত্রক শৈলীর ওয়েব অ্যাপ্লিকেশন। এটি অবজেক্ট রিলেশনাল ম্যাপিংয়ের জন্য সত্তা ফ্রেমওয়ার্ক ব্যবহার করে। এবং ডোমেন মডেলের ধরণের জন্য দুটি পৃথক শ্রেণি রয়েছে are একটি সেট ওআরএমের সাথে আলাপচারিতার জন্য ব্যবহৃত হয় এবং অন্যটি এমভিসি সিস্টেমে মডেল হিসাবে ব্যবহৃত হয়। উদাহরণস্বরূপ, এখানে দুটি শ্রেণি থাকতে পারে:
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
এবং
public class OrderModel{
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
public OrderModel( Order from){
this.Customer= from.Customer;
// copy all the properties over individually
}
public Order ToOrder(){
Order result =new Order();
result.Customer = this.Customer;
// copy all the properties over individually
}
}
আমি এই পদ্ধতির বেশ কয়েকটি ত্রুটিগুলি সম্পর্কে চিন্তা করতে পারি (কোড পরিবর্তন করার জন্য আরও স্থানগুলি, কিছু বদলে স্মৃতিতে বসে আরও কিছু জিনিস, চারপাশে ডেটা অনুলিপি করতে আরও বেশি সময় ব্যয় করে) তবে এখানে সুবিধাগুলি কী তা আসলে আমি নিশ্চিত নই। আমি মনে করি মডেল ক্লাসগুলির জন্য আরও নমনীয়তা? তবে সত্তা শ্রেণীর পাশাপাশি সাবক্লাসিং করে আমি তা পেতে পারি। আমার প্রবণতাটি এই দুটি শ্রেণির গ্রুপগুলিকে একীভূত করা বা সম্ভবত মডেল ক্লাসগুলি সত্তা শ্রেণির সাবক্লাস হতে পারে। তাহলে আমি কি এখানে গুরুত্বপূর্ণ কিছু মিস করছি? এটি কি সাধারণ ডিজাইনের ধরণ যা আমি অবগত নই? আমি যে রিফেক্টরটি নিয়ে ভাবছি তার সাথে না যাওয়ার জন্য কি কোনও ভালো কারণ আছে?
হালনাগাদ
এই প্রকল্পের আমার প্রাথমিক বিবরণটিতে কিছু গুরুত্বপূর্ণ বিবরণের অভাব অনুভব করায় এখানকার কয়েকটি উত্তর আমাকে উপলব্ধি করছে। প্রকল্পে বিদ্যমান একটি তৃতীয় গ্রুপও রয়েছে: পৃষ্ঠা মডেল ক্লাসগুলি। পৃষ্ঠাগুলি সমর্থন করে মডেল হিসাবে প্রকৃতপক্ষে সেগুলি ব্যবহার করা হচ্ছে। এগুলির মধ্যে এমন তথ্যও রয়েছে যা ইউআই-র সাথে সুনির্দিষ্ট এবং ডাটাবেসে কোনও অর্ডার সহ সংরক্ষণ করা হবে না। একটি উদাহরণ পৃষ্ঠা মডেল শ্রেণি হতে পারে:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
আমি এখানে এই তৃতীয় গোষ্ঠীর ইউটিলিটি সম্পূর্ণরূপে দেখতে পাচ্ছি এবং এটিকে অন্য কোনও কিছুতে মার্জ করার কোনও পরিকল্পনা নেই (যদিও আমি এটির নতুন নাম দিতে পারি)।
মডেল গ্রুপের ক্লাসগুলি বর্তমানে অ্যাপ্লিকেশনটির এপিআই দ্বারা ব্যবহৃত হয়, যা আমি ভাল ধারণা কিনা সে সম্পর্কে ইনপুট শুনতে আগ্রহী হব।
আমার আরও উল্লেখ করা উচিত যে গ্রাহককে এখানে স্ট্রিং হিসাবে উপস্থাপন করা হচ্ছিল উদাহরণটি সহজ করা, কারণ এটি সিস্টেমে আসলে সেভাবেই প্রতিনিধিত্ব করা হচ্ছে। প্রকৃত সিস্টেমে গ্রাহকটির নিজস্ব বৈশিষ্ট্য সহ ডোমেন মডেলের একটি স্বতন্ত্র ধরণের হিসাবে রয়েছে