在我的应用程序中,我既需要轻量级版本的对象,也需要重量级版本的对象。
这是一个示例类(仅出于讨论目的):
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检查。
编辑:
该对象模型正在客户端-服务器应用程序的客户端上使用。在使用轻量级对象的情况下,我不希望延迟加载,因为这会浪费时间和内存(我已经将对象存储在客户端的其他位置)
最佳答案
延迟初始化,虚拟代理和Ghost是该延迟加载模式的三种实现。基本上,它们在需要时引用负载属性。现在,我想您将使用一些存储库来存储对象,因此我鼓励您使用任何可用的ORM工具。 (Hibernate,Entity Framework等),它们都为您免费实现了这些功能。
关于c# - 是否有轻型和重型版本的设计模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10322562/