Bev*_*van 1 .net c# domain-driven-design
我有一个特定的场景,其中聚合具有检查地址是否有效的行为。此验证是通过网站上的内联 ajax 表单验证在聚合上触发的。在聚合和网站之间是协调两者的应用程序服务。
就目前而言,我创建了一个本质上是空的聚合并设置了地址属性,以便可以完成检查。基于此,我将 true 或 false 返回到网站 (ASP.NET MVC)。在 DDD 的上下文中,这似乎不是正确的方法。
public bool IsAddressAvailable(string address)
{
var aggregate = new Aggregate
{
Address = address
};
return aggregate.IsAddressValid();
}
Run Code Online (Sandbox Code Playgroud)
我有哪些选择可以更好地使用 DDD?我正在考虑将其分离为域服务。任何意见,将不胜感激!
通常你的聚合不应该公开Get-方法,你总是想遵循告诉-不要-询问原则。如果有什么东西需要做-那么你调用一个聚合方法,它使得它完成。
但是您通常不想询问 Aggregate 数据是否有效。特别是如果您已经有一个服务可以为您完成这项工作,为什么要将这种“验证”与聚合混合使用?
经验法则是:
在你的情况下,据我所知,你只需要验证用户的输入,所以你不需要打扰你的域,因为两个原因:
因此,如果您只需要“只读”验证,只需针对您的服务进行验证。如果您需要在操作过程中验证用户数据,请在调用域之前(可能在您的命令处理程序中)执行此操作。并注意赛车条件(DB 唯一约束可以提供帮助)。
您还应该考虑阅读本文以更深入地考虑设置验证:http : //codebetter.com/gregyoung/2010/08/12/eventual-consistency-and-set-validation/
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |