|
|
1
1
首先,我认为您不应该使用异常来处理“正常”的业务逻辑,比如检查重复的电子邮件地址。这是一个很好的文档反模式,最好避免。保留对数据库的约束,并处理任何重复的异常,因为它们无法避免,但请通过检查将其保持在最小值。我不建议锁桌子。 第二,你已经把ddd标签放在这个问题上了,所以我会用ddd的方式回答它。在我看来,你需要一个域名服务或工厂。一旦您在域服务或工厂中移动了此代码,就可以向其中注入一个用户存储库,并对其进行调用,以查看是否已经存在具有该电子邮件地址的用户。 像这样:
这允许您将责任稍微分开一点,并使用域服务来协调事情。希望有帮助! |
|
|
2
1
如果已经在用户表上正确地指定了约束,则添加操作将引发一个异常,告诉您已经有一个重复的值。您可以在CreateUser方法中捕获该异常并返回空值或某些重复的用户状态代码,或者让它流出并稍后捕获。 您不想测试代码中是否存在它,然后再添加,因为在测试和添加之间有一点可能性,有人会过来添加同一封电子邮件,因为无论如何都会引发异常…
|
|
|
3
0
考虑到“用户电子邮件对帐户必须是唯一的规则”,那么最重要的是在数据库模式中指定电子邮件是唯一的,这样,如果电子邮件重复,数据库插入将失败。 您可能无法阻止两个用户几乎同时添加同一封电子邮件,因此接下来的事情是,代码应该(优雅地)处理由上述原因导致的插入失败。 在实现了上述功能之后,在插入之前查看电子邮件是否是唯一的,这只是可选的。 |
|
|
Birdalicious · 带日志的装饰图案 1 年前 |
|
|
Saulo Torres · 依赖注入程序在DDD项目上不起作用 2 年前 |
|
|
yyqwerty · 领域驱动设计与Scala[关闭] 2 年前 |
|
|
Tony Raimo · 域实体是否应该调用存储库? 8 年前 |
|
|
Seb · DDD只读存储库返回“值对象” 8 年前 |