アプリケーションには、オブジェクトの軽量バージョンと重量バージョンの両方が必要です。
- 軽量オブジェクトには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チェックを行う必要があります。
編集: このオブジェクトモデルは、クライアントサーバーアプリケーションのクライアント側で使用されています。軽量オブジェクトを使用している場合、時間とメモリの浪費になるため、遅延読み込みは必要ありません(他の場所のクライアント側のオブジェクトはすでにメモリにあります)