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


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

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

当客户结帐时,产品/服务将作为包含订单项的订单保存到数据库中。

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

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

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

报价是订单吗?我说不是。

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

最新更新