ddd中的应用程序层可以有模型吗?
更明确地说,我的系统中有一个credential
实体,它与域层之外的身份验证过程有关,那么这个实体将在哪里?我是领域驱动设计的新手。
应用层可以使用自己的数据表示。如果将其连接到用户界面,则应用程序层必须将域对象转换为可查看的数据。
但我不会称之为"模型",除非是在"视图模型"的意义上
如果没有更多的细节,很难说有什么更有用的,所以我将尝试通过示例来回答您的集成问题。
Vaughn Vernon的示例应用程序
看看Vernon的示例应用程序,您可以将身份验证服务与您的消费应用程序隔离开来。Vernon为此建模了三个独立的Java应用程序。
现在有了提供所有身份验证的IdentityAccess服务。在那里,您可以创建Tenant
实体。还有协作应用程序(论坛等),它使用自己的Tenant
内部表示。
因此,客户端应用程序获得一个TenantId
并创建自己的Tenant
对象,以将论坛线程与租户相关联。Tenant
不会在此应用程序中更改或持久化,仅使用。
将域对象与外部内容绑定
你的观点可能更简单。如果你有一个Credential
实体(在你的域中)和它之外的一些身份验证逻辑,让"authenticator"实现Domain的专用接口,并在您真正需要的情况下将其注入Domain对象。(这是Ports&Adapters方法:双方都可以指定接口并等待具体实现;另一方实现接口并将对象注入。)
我想你真的不必从域内访问身份验证逻辑,但我们必须看到更多的代码来判断这一点。
Vernon在域内使用AuthenticationService来处理错误的登录详细信息。