【问题标题】:Can Domain Driven Design Application layer have Models领域驱动设计应用层可以有模型吗
【发布时间】:2015-05-30 09:43:20
【问题描述】:

ddd 中的应用层可以有模型吗?

更明确地说,我的系统中有一个credential 实体,它与域层之外的身份验证过程相关,那么这个实体将在哪里?我是领域驱动设计的新手。

【问题讨论】:

  • 如果在Domain层之外,可以称之为域实体。我认为credential或安全相关模型应该在基础设施层

标签: php design-patterns domain-driven-design ddd-service


【解决方案1】:

应用层可以使用自己的数据表示。如果将其连接到用户界面,应用层必须将域对象转换为可查看的数据。

但我不会称它为“模型”,除非是在“视图模型”的意义上。

没有更多细节,很难说更有用的东西,所以我将尝试通过示例回答您的集成问题。

Vaughn Vernon 的示例应用

看看Vernon's sample application,您可以将身份验证服务与您的消费应用程序隔离开来。 Vernon 为此建模了三个独立的 Java 应用程序。

现在有提供所有身份验证的 IdentityAccess 服务。在那里,您可以创建Tenant 实体。然后是协作应用程序(论坛等),它使用自己的 Tenant 内部表示。

因此客户端应用程序获取TenantId 并创建自己的Tenant 对象以将论坛线程与租户相关联。 Tenants 不会在此应用中更改或保留,仅用于使用。

将域对象绑定到它之外的东西

你的观点可能更简单。如果您有Credential 实体(在您的域中)和一些身份验证逻辑之外,请让“身份验证器”实现域的专用接口并将其注入回域对象如果你真的需要。(这就是端口和适配器的方法:双方可以指定接口并等待具体实现;另一方实现接口并重新注入一个对象。)

我猜您实际上不必从您的域中访问身份验证逻辑,但我们必须查看更多代码来判断这一点。

Vernon 使用AuthenticationService inside the Domain 处理错误的登录详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2021-11-25
    • 2020-08-26
    • 1970-01-01
    • 2011-08-18
    • 2012-06-08
    相关资源
    最近更新 更多