В настоящее время я работаю сольным разработчиком над моим текущим проектом. Я унаследовал проект от другого разработчика, который с тех пор покинул компанию. Это веб-приложение в стиле модель-вид-контроллер в 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
}
}
Я могу вспомнить несколько недостатков этого подхода (больше мест для изменения кода, если что-то меняется, больше объектов, сидящих в памяти, больше времени, затрачиваемого на копирование данных), но я не совсем уверен, какие здесь преимущества. Полагаю, больше гибкости для модельных классов? Но я мог бы получить это, создав подклассы классов сущностей. Я бы хотел объединить эти две группы классов или, возможно, чтобы классы моделей были подклассами классов сущностей. Так я что-то упустил здесь? Это общий шаблон дизайна, о котором я не знаю? Есть ли веские причины не доводить до конца рефакторинг, который я рассматриваю?
ОБНОВИТЬ
Некоторые ответы здесь заставляют меня понять, что в моем первоначальном описании проекта отсутствовали некоторые важные детали. Существует также третья группа классов, которые существуют в проекте: классы модели страницы. Они - те, которые фактически используются в качестве модели, поддерживающей страницу. Они также содержат информацию, относящуюся к пользовательскому интерфейсу, и не будут храниться с заказом в базе данных. Примером класса модели страницы может быть:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
Я полностью вижу полезность этой третьей группы здесь, и у меня нет планов объединять ее с чем-то другим (хотя я мог бы переименовать ее).
Классы в группе моделей также в настоящее время используются API-интерфейсом приложения, и мне также было бы интересно узнать, является ли это хорошей идеей.
Я должен также упомянуть, что клиент, представленный здесь в виде строки, должен был упростить пример, а не потому, что он действительно представлен таким образом в системе. Фактическая система имеет клиента как отдельный тип в модели предметной области со своими собственными свойствами.