我有两个表。如何将非规范化的值带入业务对象?
订单 - 使用列的OrderID,OrderStatusID
OrderStatus - 使用列OrderStatusID,说明
我有一个订单对象这就要求数据库并填充其属性在我的代码中使用。现在我可以访问Order.OrderStatusID,但在我的应用程序中,我确实需要访问“Description”字段。
如何用优秀的面向对象设计优雅地处理这件事?
我有两个表。如何将非规范化的值带入业务对象?
订单 - 使用列的OrderID,OrderStatusID
OrderStatus - 使用列OrderStatusID,说明
我有一个订单对象这就要求数据库并填充其属性在我的代码中使用。现在我可以访问Order.OrderStatusID,但在我的应用程序中,我确实需要访问“Description”字段。
如何用优秀的面向对象设计优雅地处理这件事?
通常我更喜欢将查找处理为Value objects。我也用Null Object pattern。
public class Order {
private int statusID;
public OrderStatus Status {
get {
return OrderStatus.Resolve(statusID);
}
set {
statusID = value != null ? value.ID : null;
}
}
}
public class OrderStatus {
public static OrderStatus Resolve(int statusID)
{
OrderStatus status = null;
// read from cache or DB
...
// if not found return Null object
if (status == null)
status = new OrderStatus(null, string.Empty);
return status;
}
}
您可以使用SQL SELECT语句用加入到OrderStatus表,包括列哟每个表要...
Select O.OrderId, O.OrderStatusId, S.Descriptiuon
From Order O
Join OrderStatus S
On S.OrderStatusId = O.OrderStatusId
Where OrderId = 23 -- or whatever
难道秩序之间的一个一对一的关系订单状态?我猜这取决于你为什么要有一个OrderStatus表的目的,因为我认为实际上并不需要单独的OrderStatus表?
基本上所有表格给你的是能够改变订单状态的描述。从代码中,您将根据预定义的OrderStatusID(来自种子数据?)或通过描述来编写代码。如果是这种情况,为什么不让Order表包含一个OrderStatus列,该列是一个整数,并且可以映射到一个枚举类型?
我正在使用的系统创建其他业务对象的实例并设置Id。其他业务对象在使用时将被检索。例如
订单属性
int OrderId = 5
int OrderStatusId = 3
OrderStatus OrderStatus_ref
{
get
{
if OrderStatus_ref == null
OrderStatus_ref = new OrderStatus(OrderStatusId)
return OrderStatus_ref
}
}
这反正是一般的想法。
我的订单对象可能会包含状态描述字段(只读[非内部类])以及任何其他类似的字段。
我的getter(例如LoadByID,LoadAll等)可能会使用包含所有这些描述性字段的View(例如OrdersView)。这些描述字段是只读的,以便您不会意外设置这些字段,认为您可以将更改保存到数据库中。
我知道如何从数据库中获取数据集,但我想知道如何映射到我的对象。当我填充Order对象时,能够作为描述访问Order Status并不是外部整数值。 – 2008-11-18 14:21:42