私は、ドメイン駆動型設計の価格を使用して私のASP.NET MVCアプリケーションを書き直しに取り組んでいます。私は自分のUserエンティティを検証しようとしています。これまでは、基本的な規則(ユーザー名とパスワードが空白でない文字列など)を検証することができました。しかし、ルールの1つとして、ユーザー名が一意であることを確認する必要があります。しかし、私はこれを行うためにデータベースにアクセスする必要があります。つまり、IUserRepositoryを自分のUserエンティティに挿入する必要があります。DDDドメインモデル複雑な検証
public class User
{
private readonly IUserRepository _userRepository;
public User(IUserRepository repo)
{
_userRepository = repo;
}
public override void Validate()
{
//Basic validation code
if (string.IsNullOrEmpty(Username))
throw new ValidationException("Username can not be a null or whitespace characters");
if (string.IsNullOrEmpty(Password))
throw new ValidationException("Password can not be a null or whitespace characters");
//Complex validation code
var user = _userRepository.GetUserByUsername(Username);
if (user != null && user.id != id)
throw new ValidationException("Username must be unique")
}
}
しかし、これは...間違っているようです。私のエンティティを私のリポジトリに依存させることは、悪い考えのように思える(私が間違っていれば私を修正する)。しかし、エンティティに検証コードを持つことは理にかなっています。複雑な検証コードを置くのに最適な場所はどこですか?
また、[この回答を見る](http://stackoverflow.com/a/9676307/706456) – oleksii