在我的应用程序中,我需要对象的轻量级和重量级版本。
- 轻量级对象将仅包含 ID 字段,但不包含相关类的实例。
- 重量级对象将包含 ID 和这些类的实例。
这是一个示例类(仅用于讨论目的):
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;
}
}
是否有一个好的设计模式可以遵循来实现这一点?
我可以看到如何将它编码为单个类(如我上面的示例),但不清楚以何种方式使用实例。我需要在我的代码中进行 NULL 检查。
编辑: 此对象模型正在客户端-服务器应用程序的客户端上使用。在我使用轻量级对象的情况下,我不想要延迟加载,因为这会浪费时间和内存(我已经在其他地方的客户端的内存中拥有对象)