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


Can Domain Driven Design Application layer have Models

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

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

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

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

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

Vaughn Vernon的示例应用程序

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

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

因此,客户端应用程序获得一个TenantId并创建自己的Tenant对象,以将论坛线程与租户相关联。Tenant不会在此应用程序中更改或持久化,仅使用。

将域对象与外部内容绑定

你的观点可能更简单。如果你有一个Credential实体(在你的域中)和它之外的一些身份验证逻辑,让"authenticator"实现Domain的专用接口,并在您真正需要的情况下将其注入Domain对象(这是Ports&Adapters方法:双方都可以指定接口并等待具体实现;另一方实现接口并将对象注入。)

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

Vernon在域内使用AuthenticationService来处理错误的登录详细信息。