鉴于ExtendedOrder从订单继承,那么你通常不会有ExtendedOrderRepository和ExtendedOrderService - 在OrderRepository和OrderService就足够了。
的ExtendedOrder仍然是一个令,所以应该生活秩序聚合根的范围内,并使用OrderRepository和OrderService。
OrderRepository将返回Order对象,该对象可能是也可能不是扩展订单。 ORM如NHibernate支持这种开箱即用的行为。
以这种方式工作使本身更优雅的代码和更少的重复。代码可能看起来像:
public class Order
{
public virtual void Process()
{
// do processing stuff to an order
// ...
}
}
public class ExtendedOrder : Order
{
public override void Process()
{
// do the standard order processing
base.Process();
// do extra processing specific to an extended order
// ...
}
}
public class OrderService
{
public void ProcessRecentOrders()
{
IEnumerable<Order> orders = orderRepository.GetRecentOrders();
// orders may include Order and ExtendedOrder objects in the collection...
foreach (Order in orders)
{
// ...but polymorphism ensures that we don't need to know whether order is an ExtendedOrder or an Order
order.Process();
}
}
}
,如果需要的话,你仍然可以明确的秩序和ExtendedOrder区分:
public void SendOrder(Order order)
{
// do normal order sending stuff
orderSender.TransmitOrder(order);
if (order is ExtendedOrder)
{
// do additional stuff required by an ExtendedOrder
}
}
这种方法可以让您继续创建其他订单类型(例如“SpecialOrder”),而不存储库和服务的增加。
是从Order继承的ExtendedOrder吗? –
是继承 – Ricibald
Ricibald,你可以发布两个类定义 – smartcaveman