【问题标题】:Business logic that needs to be reused, where should I placed it?需要复用的业务逻辑,应该放在哪里?
【发布时间】:2017-08-11 03:35:23
【问题描述】:

我有这样的业务逻辑需要重用。我的业务逻辑是这样排序的:

User.Save();  
Payroll.Calculate();  
Mailer.Send();  

目前它在我的控制器中,但我希望它在另一个控制器中使用。我应该把业务逻辑放在哪里?如果有设计模式,它是什么?

对不起,菜鸟问题。

【问题讨论】:

  • 我不会考虑这个业务逻辑,它更多的是工作流协调逻辑。通常有一个额外的应用程序服务层,这种逻辑存在。控制器然后只是调用应用程序服务。您能否展示您的真实代码示例和整个方法,如果您希望我们向您提出可重用的抽象,这将很有用。
  • 很抱歉我无法发布真实代码。但是,你能给我看一下应用服务层的例子吗?

标签: oop model-view-controller business-logic separation-of-concerns


【解决方案1】:

这不是第一次看起来那么简单的问题。我会告诉问题 WHERE 的答案将取决于几个因素: 1. 这段业务逻辑是否与其他Services交互? 2. 这段业务逻辑需要和仓库交互吗? 3. 这种业务逻辑的平静是否影响不止一个实体? 和更多。取决于我会选择一个问题的答案: 如果业务逻辑确实描述了实体真正应该做什么或将其移动到领域模型服务,则将其直接放入实体。有时我会使用更多层来保持一切清晰、独立和简单。

DDD 的一个关键概念是 Ubiquitos 语言,您应该以它在代码中表示您的 ubiquitos 语言的方式编写域模型。因此,首先考虑您的域模型,然后考虑用于实现结果的模式。

我建议你查看Marco Pivetta's presentations,他经常展示一些非常好的 DDD 示例。

【讨论】:

    【解决方案2】:

    将应用程序服务用于 plalx 建议的逻辑。 您可以在以下书籍的最后一章中找到对设计应用程序服务的不同选项的很好解释: https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577

    我还建议看看六边形架构: http://alistair.cockburn.us/Hexagonal+architecture

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2012-07-16
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2011-08-02
      相关资源
      最近更新 更多