मैं वर्तमान में अपने वर्तमान प्रोजेक्ट पर एकल डेवलपर के रूप में काम कर रहा हूं। मुझे एक अन्य डेवलपर से प्रोजेक्ट विरासत में मिला है, जिसने कंपनी छोड़ दी है। यह C # में एक मॉडल-व्यू-कंट्रोलर स्टाइल वेब एप्लिकेशन है। यह ऑब्जेक्ट रिलेशनल मैपिंग के लिए एंटिटी फ्रेमवर्क का उपयोग करता है। और डोमेन मॉडल में प्रकारों के लिए कक्षाओं के दो अलग-अलग सेट हैं। एक सेट का उपयोग ORM के साथ बातचीत के लिए किया जाता है और दूसरे का उपयोग MVC सिस्टम में मॉडल के रूप में किया जाता है। उदाहरण के लिए, निम्न दो वर्ग हो सकते हैं:
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
}
}
मैं इस दृष्टिकोण में कई कमियां सोच सकता हूं (कोड बदलने के लिए अधिक स्थान यदि कुछ बदलता है, तो स्मृति में बैठे अधिक ऑब्जेक्ट, अधिक समय डेटा की प्रतिलिपि बनाने में बिताया जाता है), लेकिन मुझे वास्तव में यकीन नहीं है कि यहां क्या फायदे हैं। मॉडल कक्षाओं के लिए अधिक लचीलापन, मुझे लगता है? लेकिन मैं इकाई वर्गों को भी उपवर्ग द्वारा प्राप्त कर सकता था। मेरा झुकाव इन दो वर्ग समूहों का विलय करना होगा, या संभवतः मॉडल कक्षाएं इकाई वर्गों के उपवर्ग होंगे। तो क्या मुझे यहाँ कुछ महत्वपूर्ण याद आ रहा है? क्या यह एक सामान्य डिज़ाइन पैटर्न है जिसकी मुझे जानकारी नहीं है? क्या मैं जिन रिफ्लेक्टर के बारे में सोच रहा हूँ, उनके साथ नहीं होने के अच्छे कारण हैं?
अपडेट करें
यहाँ कुछ उत्तर मुझे यह एहसास करा रहे हैं कि परियोजना के बारे में मेरा प्रारंभिक विवरण कुछ महत्वपूर्ण विवरणों की कमी था। कक्षाओं का एक तीसरा समूह भी है जो परियोजना में मौजूद है: पृष्ठ मॉडल कक्षाएं। वे वास्तव में पृष्ठ का समर्थन करने वाले मॉडल के रूप में उपयोग किए जा रहे हैं। उनमें ऐसी जानकारी भी होती है जो UI के लिए विशिष्ट होती है, और इसे डेटाबेस में एक आदेश के साथ संग्रहीत नहीं किया जाएगा। एक उदाहरण पृष्ठ मॉडल वर्ग हो सकता है:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
मैं पूरी तरह से इस तीसरे समूह की उपयोगिता को यहां अलग-अलग देखता हूं, और इसे किसी और चीज के साथ विलय करने की कोई योजना नहीं है (हालांकि मैं नाम बदल सकता हूं)।
मॉडल समूह में कक्षाएं वर्तमान में एप्लिकेशन के एपीआई द्वारा उपयोग की जाती हैं, जो कि मैं एक अच्छा विचार है, इस पर श्रवण इनपुट में भी दिलचस्पी होगी।
मुझे यह भी उल्लेख करना चाहिए कि ग्राहक को एक स्ट्रिंग के रूप में यहाँ प्रस्तुत किया जा रहा है, उदाहरण को सरल बनाने के लिए, इसलिए नहीं कि यह वास्तव में सिस्टम में उस तरह का प्रतिनिधित्व कर रहा है। वास्तविक प्रणाली के पास अपने स्वयं के गुणों के साथ डोमेन मॉडल में एक विशिष्ट प्रकार के रूप में ग्राहक है