Tôi cần có cả các phiên bản trọng lượng nhẹ và trọng lượng nặng của một đối tượng trong ứng dụng của mình.Có mẫu thiết kế cho các phiên bản nhẹ và nặng của vật thể không?
- Đối tượng trọng lượng nhẹ chỉ chứa các trường ID, nhưng không có trường hợp các lớp liên quan.
- Một đối tượng có trọng lượng nặng sẽ chứa ID và các phiên bản của các lớp đó.
Dưới đây là một lớp dụ (đối với mục đích của cuộc thảo luận chỉ):
public class OrderItem
{
// FK to Order table
public int OrderID;
public Order Order;
// FK to Prodcut table
public int ProductID;
public Product Product;
// columns in OrderItem table
public int Quantity;
public decimal UnitCost;
// Loads an instance of the object without linking to objects it relates to.
// Order, Product will be NULL.
public static OrderItem LoadOrderItemLite()
{
var reader = // get from DB Query
var item = new OrderItem();
item.OrderID = reader.GetInt("OrderID");
item.ProductID = reader.GetInt("ProductID");
item.Quantity = reader.GetInt("Quantity");
item.UnitCost = reader.GetDecimal("UnitCost");
return item;
}
// Loads an instance of the objecting and links to all other objects.
// Order, Product objects will exist.
public static OrderItem LoadOrderItemFULL()
{
var item = LoadOrderItemLite();
item.Order = Order.LoadFULL(item.OrderID);
item.Product = Product.LoadFULL(item.ProductID);
return item;
}
}
Có một mẫu thiết kế tốt để làm theo để thực hiện điều này?
Tôi có thể xem cách nó có thể được mã hóa thành một lớp đơn (như ví dụ của tôi ở trên), nhưng không rõ ràng trong trường hợp một cá thể đang được sử dụng. Tôi sẽ cần phải có kiểm tra NULL trong suốt mã của tôi.
Chỉnh sửa: Mô hình đối tượng này đang được sử dụng ở phía ứng dụng khách-máy chủ. Trong trường hợp tôi đang sử dụng các vật nặng, tôi không muốn tải xuống vì nó sẽ lãng phí thời gian và bộ nhớ (tôi sẽ có các đối tượng trong bộ nhớ ở phía máy khách ở nơi khác)
Tôi không luôn muốn tải đối tượng đầy đủ. Và đôi khi, tôi đã có một ví dụ của nó, vì vậy tôi không cần phải tải lại từ DB anyways. – TheSean
@TheSean Nó không quan trọng. Đó chính là tiện ích của mẫu. Nếu bạn cần phải sử dụng chúng, sau đó bạn tải chúng, nếu không thì không. Bây giờ, nếu bạn đang nói về việc không để lộ các thuộc tính phiên bản nặng là thứ khác, nhưng cũng có thể được giải quyết bằng cách sử dụng (tức là hai giao diện: một giao diện nhẹ hơn và nặng hơn). –
Ví dụ: giả sử tôi có 1.000 đơn đặt hàng, mỗi đơn hàng cho cùng một sản phẩm. Với đề xuất của bạn để tải lười biếng đối tượng Product, tôi sẽ tải 1.000 trường hợp của cùng một đối tượng. Đây là những gì tôi có nghĩa là do lãng phí bộ nhớ. – TheSean