假设我们有一个Order类和OrderManagerService类。
订单类:[某些状态和方法作用于国家]
OrderManagerService类:[没有状态。只遵循静态方法]
问题:假设我们在后面使用关系数据库。我们的目标是更新订单状态。那么,状态需要在DB中更新。我关心的是放置updateStatus方法的位置。
好吧,第一个选项似乎在封装之后。但是,我个人不喜欢它,因为我们可能最终从实体对象调用DAO层[也许,这可能没问题]。想知道什么是正确的设计选择,为什么?非常感谢任何帮助。
答案 0 :(得分:2)
选项2 - 创建一个新方法,如OrderManagerService.updateOrderStatus?
为什么?
您的服务层应该封装逻辑业务工作单元,在您的情况下,UOW是
并且您将使用事务划分updateOrderStatus(...)。而且这项服务仍然是无国籍的。
答案 1 :(得分:0)
我认为OrderManagerService应该有一个Order类项数组。这样,您可以遍历每个项目并更新其中的状态。或者,如果您正在寻找访问单个订单商品,请通过订单类直接访问它并在那里更新。
在您使用当前设置的任何一种情况下,updateStatus()
都应该在Order类中。
答案 2 :(得分:0)
observer pattern怎么样?
updateStatus()将在Order类中,OrderManagerService类将观察到它。
每当您更改状态(或任何其他)时,Manager都会看到它并在需要时执行某些操作(例如更新数据库中的状态)。
管理器可以在创建实例时绑定到Order并在getOrder()方法中返回它。
如果销毁订单的实例(仅关注非托管语言),您还可以实现一些方法从订单取消绑定管理器。
答案 3 :(得分:0)
由于你的问题的标题包含“使用面向对象的设计”,我将状态转换逻辑放在Order本身中,因为除了数据之外,对象应该封装行为。
让服务中包含的所有行为都可以比作Anemic Domain Model,由你来决定是否是一件坏事 - 对此有很多争论。
答案 4 :(得分:-1)
为什么有单独的OrderManagerService类?我把所有这些方法都塞进了Order。
(这可能不是理论上正确的或四合一的设计模式,但我不在乎,因为它会更有意义。)