一个实体(比方说一个UserEntity)对它的属性有严格的规则,它可以存在两种状态 - 持久化(意味着它有一个id
)和预先持久化(这意味着它还没有id
)。如何在持久化之前处理域实体验证?
根据对this question about how to handle required properties的回答,“真正的”用户实体只能通过传递给其构造函数的id
创建。
但是,当我需要从浏览器发送的信息创建一个new UserEntity
时,我需要能够在持久化到db之前验证信息。
在过去,我会简单地创建一个空白UserEntity(无id
),设置新的属性,以及验证它 - 但是,在考虑实体的这种新的,更安全的方法,我不应该永远创建一个不带id
的新UserEntity。
我不想创建两个知道如何验证我的UserEntity属性的地方,因为如果他们改变了(他们会改变的话),它将会更新代码两倍并且增加错误的几率。
如何有效地集中我实体属性的验证知识?
注意
我有一个想法体现in this question,其中我认为存储在标准值对象,它会知道有关它的性质的规则,如电子邮件,密码和名字的非国有性质不同的服务,如Controller,Validator和Repo或Mapper可以使用。
任何人都可以用更简单/不同的方式解释这个吗? – johnnietheblack 2012-03-22 21:39:31