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

以上是 UML 类图的 ascii 艺术。我有一个名为“offer”的域类,其中包含项目。例如,一份费用为 500 美元的旅行优惠,其中包含一张巴士票、在汽车旅馆的一晚住宿和一场演出。

当客户从商店结账时,报价将作为包含订单项目的订单保存到数据库中。

在纯面向对象的设计中,让 offer 继承自 是否有意义OrderPersisterOrderPersister可以使用其超类AbstractPersister. 我想添加一个方法来OrderPersister调用Book,它将在数据库中创建订单及其项目。

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

4

1 回答 1

1

在扩展一个类之前,你应该问这个问题:是一个?

报价是 OrderPersister 吗?我说不是。

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

于 2012-11-25T06:26:57.450 回答