这是一个明智的面向对象设计吗?

时间:2012-11-24 18:58:09

标签: oop

---------------------
| AbstractPersister |
---------------------
         ^
        / \
        ---
         |
------------------
| OrderPersister |
------------------
         ^
        / \
        ---
         |
    ---------     ---------
    | Offer |<>---| Item  |
    ---------     ---------

以上是UML类图的ascii art。我有一个名为“offer”的域类,其中包含项目。例如。旅行报价为500美元,包含公交车票,在汽车旅馆住宿和演出。

当客户退出商店时,优惠会作为包含订单商品的订单持久保存到数据库。

在纯粹的面向对象设计中,使提供继承自OrderPersister是否有意义? OrderPersister可以使用其超类AbstractPersister获得与数据库的连接。我想向OrderPersister添加一个名为Book的方法,该方法将在数据库中创建订单及其项目。

如果这是一个糟糕的设计,有什么替代品?我希望这可以尽可能面向对象。

1 个答案:

答案 0 :(得分:1)

在扩展课程之前,你应该问这个问题:是吗?

优惠是OrderPersister吗?我说不是。

您应该查看Data Mapper模式。它将允许您使用对持久性一无所知的域对象,并且仍然能够持久化它们。