我目前是我当前项目的独立开发人员。我从另一个离开公司的开发商那里继承了这个项目。它是C#中的模型视图控制器样式的Web应用程序。它使用实体框架进行对象关系映射。域模型中的类型有两组不同的类。一组用于与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;}
}
我完全看到这第三组的效用在这里是截然不同的,并且没有计划将其与其他东西合并(尽管我可能会重命名)。
应用程序的API当前也使用了模型组中的类,我也希望对这种想法是否有用感兴趣。
我还应该提到,在这里用字符串表示客户是为了简化示例,而不是因为在系统中实际上是用这种方式表示的。实际系统将客户作为域模型中的独特类型,具有自己的属性