gpt4 book ai didi

c# - 是否有针对对象的轻型和重型版本的设计模式?

转载 作者:太空狗 更新时间:2023-10-29 21:40:49 27 4
gpt4 key购买 nike

我需要在我的应用程序中同时使用轻量级和重型版本的对象。

  • 轻型对象将只包含 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 检查。

编辑:该对象模型用于客户端-服务器应用程序的客户端。在我使用轻量级对象的情况下,我不希望延迟加载,因为这会浪费时间和内存(我已经在客户端其他地方的内存中拥有这些对象)

最佳答案

延迟初始化、虚拟代理和 Ghost 是延迟加载模式的三种实现。基本上,它们会在您需要时引用加载属性。现在,我想您将使用一些存储库来存储对象,因此我鼓励您使用任何可用的 ORM 工具。 (Hibernate、Entity Framework 等),它们都免费为您实现这些功能。

关于c# - 是否有针对对象的轻型和重型版本的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322562/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com