Tôi hiện đang làm việc như một nhà phát triển solo cho dự án hiện tại của mình. Tôi đã kế thừa dự án từ một nhà phát triển khác, người đã rời công ty. Đây là một ứng dụng web kiểu mô hình-khung nhìn-trình điều khiển trong C #. Nó sử dụng Entity Framework để ánh xạ quan hệ đối tượng. Và có hai nhóm lớp khác nhau cho các kiểu trong mô hình miền. Một bộ được sử dụng để tương tác với ORM và bộ kia được sử dụng làm mô hình trong hệ thống MVC. Ví dụ, có thể có hai lớp như sau:
public class Order{
int ID{get;set;}
String Customer{get;set;}
DateTime DeliveryDate{get;set;}
String Description{get;set;}
}
và
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
}
}
Tôi có thể nghĩ ra một số nhược điểm của phương pháp này (nhiều nơi thay đổi mã hơn nếu có gì đó thay đổi, nhiều đối tượng ngồi trong bộ nhớ hơn, mất nhiều thời gian hơn để sao chép dữ liệu xung quanh), nhưng tôi không thực sự chắc chắn những lợi thế ở đây là gì. Linh hoạt hơn cho các lớp mô hình, tôi cho rằng? Nhưng tôi có thể có được điều đó bằng cách phân lớp các lớp thực thể là tốt. Xu hướng của tôi sẽ là hợp nhất hai nhóm lớp này hoặc có thể có các lớp mô hình là các lớp con của các lớp thực thể. Vì vậy, tôi đang thiếu một cái gì đó quan trọng ở đây? Đây có phải là một mẫu thiết kế phổ biến mà tôi không biết? Có lý do chính đáng nào để không trải qua với công cụ tái cấu trúc mà tôi đang dự tính không?
CẬP NHẬT
Một số câu trả lời ở đây đang khiến tôi nhận ra mô tả ban đầu của tôi về dự án đang thiếu một số chi tiết quan trọng. Ngoài ra còn có một nhóm các lớp thứ ba tồn tại trong dự án: các lớp mô hình trang. Họ là những người thực sự đang được sử dụng như là mô hình sao lưu trang. Chúng cũng chứa thông tin dành riêng cho UI và sẽ không được lưu trữ với một đơn đặt hàng trong cơ sở dữ liệu. Một lớp mô hình trang ví dụ có thể là:
public class EditOrderPagelModel
{
public OrderModel Order{get;set;}
public DateTime EarliestDeliveryDate{get;set;}
public DateTime LatestAllowedDeliveryDate{get;set;}
}
Tôi hoàn toàn thấy tiện ích của nhóm thứ ba này là khác biệt ở đây và không có kế hoạch hợp nhất nó với thứ khác (mặc dù tôi có thể đổi tên nó).
Các lớp trong nhóm mô hình hiện cũng được sử dụng bởi API của ứng dụng, điều mà tôi cũng quan tâm khi nghe ý kiến đóng góp về việc đó có phải là một ý tưởng hay không.
Tôi cũng nên đề cập rằng khách hàng được đại diện như một chuỗi ở đây là để đơn giản hóa ví dụ, không phải vì nó thực sự được thể hiện theo cách đó trong hệ thống. Hệ thống thực tế có khách hàng là một loại khác biệt trong mô hình miền, với các thuộc tính riêng của nó