현재 내 프로젝트에서 솔로 개발자로 일하고 있습니다. 나는 회사를 떠난 다른 개발자로부터 프로젝트를 물려 받았습니다. 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
}
}
이 접근법에 대한 몇 가지 단점 (어떤 것이 변경되면 코드를 변경할 수있는 더 많은 장소, 메모리에 더 많은 객체가 앉아 있고, 데이터를 복사하는 데 더 많은 시간이 걸렸음)을 생각할 수 있지만 실제로 어떤 이점이 있는지 잘 모르겠습니다. 모델 클래스에 더 많은 유연성이 있다고 생각합니다. 그러나 엔티티 클래스를 서브 클래스 화하여 얻을 수 있습니다. 내 성향은이 두 클래스 그룹을 병합하거나 모델 클래스가 엔티티 클래스의 하위 클래스가되도록하는 것입니다. 그래서 여기서 중요한 것을 놓치고 있습니까? 이것이 내가 모르는 일반적인 디자인 패턴입니까? 내가 생각하고있는 리 팩터를 사용하지 않는 좋은 이유가 있습니까?
최신 정보
여기에 대한 답변 중 일부는 프로젝트에 대한 초기 설명에 중요한 세부 정보가 부족하다는 것을 깨닫게합니다. 프로젝트에 존재하는 세 번째 클래스 그룹 인 페이지 모델 클래스도 있습니다. 이들은 실제로 페이지를 뒷받침하는 모델로 사용되는 것들입니다. 또한 UI에 특정한 정보를 포함하며 데이터베이스에서 주문과 함께 저장되지 않습니다. 예제 페이지 모델 클래스는 다음과 같습니다.
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
나는이 세 번째 그룹의 유틸리티가 여기에서 구별되는 것을 완전히보고 다른 이름과 병합 할 계획이 없습니다 (이름을 바꿀 수도 있음).
모델 그룹의 클래스는 현재 응용 프로그램의 API에서도 사용되며, 이것이 좋은 아이디어인지에 대한 의견을 듣는 데 관심이 있습니다.
또한 여기에서 고객이 문자열로 표현되는 것은 시스템에서 실제로 그러한 방식으로 표현되기 때문에 예제를 단순화하는 것이 아니라고 언급해야합니다. 실제 시스템은 고유 한 특성을 가진 고객을 도메인 모델에서 고유 한 유형으로 보유합니다.