域驱动设计应用层可以具有模型

时间:2015-03-26 11:34:42

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

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

更明确一点,我的系统中有一个credential实体,它与我的域层之外的身份验证过程有关,那么这个实体将在哪里?我是Domain Driven Design的新成员。

1 个答案:

答案 0 :(得分:2)

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

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

如果没有更多详细信息,很难说更有用,所以我会尝试通过示例回答您的集成问题。

Vaughn Vernon的示例应用程序

看一下Vernon's sample application,您可以从您的消费应用程序中隔离一个身份验证服务。 Vernon为此建立了三个独立的Java应用程序。

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

因此,客户端应用获取TenantId并创建自己的Tenant对象,以将论坛帖子与租户相关联。 Tenant未在此应用中更改或保留,仅用过。

将域对象绑定到其外部

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

我猜你真的不必从你的域内访问身份验证逻辑,但我们必须看到更多的代码来判断这一点。

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