Khi sử dụng các đối tượng kinh doanh có thể tái sử dụng, điều gì được coi là thực tiễn tốt nhất khi xây dựng các mô hình xem?
Chúng tôi sử dụng một đối tượng mà chúng tôi gọi Builder
để xây dựng các mô hình xem của chúng tôi. Một trình xây dựng cho mỗi đơn vị lượt xem logic (đơn hàng, người dùng, v.v.), trong đó mỗi đơn vị có thể chứa một số mô hình chế độ xem khác nhau (đơn hàng chứa tóm tắt, dòng đơn hàng, v.v.).
Nhà xây dựng có thể kéo dữ liệu qua một hoặc nhiều đối tượng kinh doanh tiêu chuẩn để xây dựng mô hình xem.
Điều gì được coi là thực tiễn tốt hơn khi sử dụng các đối tượng / mô hình kinh doanh trong các mô hình xem?
Cách tiếp cận 1
Cho phép sử dụng các đối tượng kinh doanh trong mô hình xem?
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary();
obModel.Order = obOrder;
return obModel;
}
}
//View model
public class OrderSummary
{
public Some.Business.Logic.Order Order;
//Other methods for additional logic based on the order
//and other properties
}
Cách tiếp cận 2
Chỉ lấy dữ liệu cần thiết từ các đối tượng kinh doanh
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary()
{
OrderNum = obOrder.OrderNum,
NumOrderLnes = obOrder.NumOrderLines,
}
return obModel;
}
}
//View model
public class OrderSummary
{
public int OrderNum;
public int NumOrderLines
//Other methods for additional logic based on the order
//and other properties
}
Tôi có thể thấy những lợi ích và nhược điểm của cả hai, nhưng tôi tự hỏi liệu có một cách tiếp cận được chấp nhận không? Trong cách tiếp cận 1, không có sự trùng lặp mã xung quanh các mô hình, nhưng nó tạo ra sự phụ thuộc vào logic nghiệp vụ. Trong cách tiếp cận 2, bạn chỉ lấy dữ liệu cần thiết cho chế độ xem, nhưng bạn sao chép mã xung quanh các mô hình.