我正在重构应用程序,并试图找出某些逻辑应该适合的位置。例如,在注册过程中,我必须根据用户的电子邮件地址检查用户是否存在。由于这需要测试用户是否存在于数据库中,因此该逻辑似乎不应与模型绑定,因为它的存在取决于它是否存在于数据库中。
但是,我将在存储库中有一个方法负责通过电子邮件等方式获取用户。这将处理有关检索用户(如果存在)的部分。从用例的角度来看,注册似乎是一个用例场景,因此似乎应该有一个带有 register 方法的 UserService(应用程序服务),该方法将调用存储库方法并执行 if then 逻辑以确定返回的用户实体是否为是否为空。
就 DDD 而言,我是否走在正确的轨道上?我是否以错误的方式看待这种情况,如果是这样,我应该如何修改我的想法?
此链接是作为一种可能的解决方案提供的,在哪里检查用户电子邮件尚未退出?. 它确实有帮助,但似乎并没有结束这个问题的循环。我似乎从本文中遗漏的事情是,谁将负责调用 CreateUserService、应用程序服务或聚合根上的方法,其中 CreateUserService 对象将与任何其他相关参数一起注入到方法中?
如果答案是应用程序服务,您似乎通过将域服务从域层中取出而失去了一些封装。另一方面,采用另一种方式意味着必须将存储库注入到域服务中。这两个选项中的哪一个更可取并且更符合 DDD?