architecture - 领域服务与应用服务

标签 architecture

域和应用程序服务之间的主要区别是什么? (我正在使用 NHibernate)

哪一层更适合业务逻辑?什么是最佳做法?

-S# Architecture 使用应用程序服务作为“协调层”,但不必费心解释为什么它不是领域服务应该是业务逻辑。

最佳答案

您的里程可能非常多,但我会尝试根据我使用它们的方式来定义。无论您的持久层如何,我都会将它们定义为实际使用:

  • 域服务 - 为强制域的完整性和促进从域中插入、创建、删除和检索数据而存在的服务。此外,域服务可以将更高级别的域对象组合编排到 View 模型中。通常,这些是存储库顶部的外观,用于隐藏一些低级实现并提供更符合 UL(通用语言)的接口(interface)以帮助管理期望。
  • 应用服务 - 特定于领域模型实现或不依赖于领域模型的服务。一个典型的例子是根据域中的状态更改或操作发送和发送电子邮件。这通常是应用程序本身的要求,并且可能没有由域模型指定。这可以在调用域服务后由应用程序服务按程序执行,也可以作为从域服务引发的事件。

  • 就像我说的,这可能不符合每个人的定义,但这有助于我确保将正确的问题放在正确的位置。

    至于将业务逻辑放在哪里更好 - 我实际上认为这很棘手。这种方法有不止一种类型的业务逻辑。如果有一个特定于应用程序的逻辑需求无法在域中定义,我会把它放在应用程序服务层。直接影响领域的东西,不管是什么应用程序,我都会放在领域服务层。

    问题实际上是花时间来确定什么是真正的“领域问题”。例如,除非知道他的电子邮件地址,否则用户可能无法对某个任意应用程序发表评论。您可以争辩说这属于任一层。关键是真正保持一致。

    关于architecture - 领域服务与应用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3839386/

    相关文章:

    C++:在同一架构层访问成员函数的建议

    database - Master + Slave 数据库架构 vs. Master + Memcache

    .net - 您会在新的商业项目中使用 S#arp 架构吗?

    architecture - ARMv7中outer和inner的定义是什么?

    orm - 领域模型如何与 UI 和数据交互而不依赖于它们?

    c++ - C++中的变量存储在哪里?

    mongodb - 如何同时高效地将数据写入 NoSQL 和 RDBMS

    java - 仅适用于 JSP、Servlet 和 Bean 的简单架构

    c# - 企业设计模式问题

    java - 当前开发/打包/分发(大型)Java(Web)应用程序的方式有什么问题?