在我的应用程序中,我既需要轻量级版本的对象,也需要重量级版本的对象。

  • 轻量级对象将仅包含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/

    10-10 02:16