ฉันกำลังทำงานเป็นนักพัฒนาเดี่ยวในโครงการปัจจุบันของฉัน ฉันสืบทอดโครงการจากผู้พัฒนารายอื่นซึ่งออกจาก บริษัท ไปแล้ว มันเป็นเว็บแอพพลิเคชั่นรูปแบบมุมมอง - คอนโทรลเลอร์ใน C # มันใช้ Entity Framework สำหรับการทำแผนที่วัตถุสัมพันธ์ และมีคลาสที่แตกต่างกันสองชุดสำหรับประเภทในรูปแบบโดเมน ชุดหนึ่งใช้สำหรับการโต้ตอบกับ 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
}
}
ฉันนึกถึงข้อเสียต่าง ๆ ของวิธีการนี้ (มีที่ให้เปลี่ยนรหัสได้มากกว่าหากมีอะไรเปลี่ยนแปลงวัตถุเพิ่มเติมนั่งอยู่ในหน่วยความจำใช้เวลามากขึ้นในการคัดลอกข้อมูลไปรอบ ๆ ) แต่ฉันไม่แน่ใจว่าข้อดีคืออะไร ฉันมีความยืดหยุ่นมากขึ้นสำหรับคลาสรุ่น แต่ฉันสามารถรับได้โดย subclassing คลาสเอนทิตีเช่นกัน ความชอบของฉันคือการรวมกลุ่มคลาสสองกลุ่มนี้หรืออาจมีคลาสโมเดลเป็นคลาสย่อยของคลาสเอนทิตี ดังนั้นฉันจึงพลาดสิ่งสำคัญที่นี่ นี่เป็นรูปแบบการออกแบบทั่วไปที่ฉันไม่ทราบหรือไม่? มีเหตุผลที่ดีที่จะไม่ทำตามผู้แนะนำที่ฉันใคร่ครวญหรือไม่?
UPDATE
บางคำตอบที่นี่ทำให้ฉันรู้ว่าคำอธิบายเริ่มต้นของโครงการขาดรายละเอียดที่สำคัญ นอกจากนี้ยังมีกลุ่มคลาสที่สามที่มีอยู่ในโครงการนั่นคือคลาสโมเดลเพจ พวกเขาเป็นคนที่ใช้จริงเป็นแบบจำลองการสำรองหน้า พวกเขายังมีข้อมูลที่เฉพาะเจาะจงกับ UI และจะไม่ถูกเก็บไว้กับการสั่งซื้อในฐานข้อมูล คลาสโมเดลของหน้าตัวอย่างอาจเป็น:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
ฉันเห็นประโยชน์ของกลุ่มที่สามนี้อย่างชัดเจนและไม่มีแผนที่จะรวมเข้ากับสิ่งอื่น (แม้ว่าฉันจะเปลี่ยนชื่อ)
ขณะนี้คลาสในกลุ่มโมเดลยังใช้โดย API ของแอปพลิเคชันซึ่งฉันยังสนใจที่จะรับฟังว่าเป็นความคิดที่ดีหรือไม่
ฉันควรจะพูดถึงว่าลูกค้าที่ถูกแสดงเป็นสตริงที่นี่เพื่อลดความซับซ้อนของตัวอย่างไม่ได้เพราะมันเป็นตัวแทนจริง ๆ แล้ววิธีการในระบบ ระบบจริงมีลูกค้าที่เป็นประเภทที่แตกต่างในรูปแบบโดเมนที่มีคุณสมบัติของตัวเอง