私はPro ASP.NET MVC Framework、Steven Sandersonを読んでいます。第11章では、データ検証について説明します。データまたはドメイン層のルール検証?
ページのモデルレイヤーへの検証ロジックの移動を参照してください。このセクションでは、392ページに、検証の実装方法を示すコードをいくつか示します。
コードはGetRuleViolations()
メソッドを実装し、Save()
メソッドは何か問題がない場合はRuleException
をスローするためにこのメソッドを使用します。ドメイン・レイヤーとデータアクセス層の間に区別がないことを
それは、しかし、私には見えますが、ここではコードです:私が働いているプロジェクトで
public void Save() {
var errors = GetRuleViolations();
if (errors.Count > 0)
throw new RuleException(errors);
// Todo: Now actually save to the database or whatever
}
private NameValueCollection GetRuleViolations() {
// validations...
}
、私はを持っていますドメイン層は、できるだけ永続性を知らないままであり、データアクセス層であり、NHibernateを介してデータアクセスを実装し、ドメイン層で定義されたインタフェースを実装しています。
ここで提案者が提案した「Save()
」メソッドで検証ルールを実装すると、データアクセスレイヤーに移行することになりますが、ドメインモデルに置く必要があります。
だから、私の質問はです:リポジトリ(永続無知)へのインターフェースをドメインエンティティを実装し、露光しドメイン層で、層状のアプリケーションを作成するときに、からリポジトリを実装データアクセス層ドメイン層とすべてのデータアクセスコードを実装するここで、検証ルールはどこにあるのですか?
私のプライマリ(または少なくとも最初の)のインターフェイスは、何かを変更する可能性がある場合、ASP.NET MVCアプリケーションになります。
ありがとうございました。
私は実際には私の心の中で戦う2つの発想があります:(1)新しいDALを書くことに決めたら、同じルール(DRY)をすべて書き直したくないです。ルールを逃したり、エラー、またはすべての新しいルールを複数回再実装する必要があります。 (2)ドメイン上で「文脈検証」を実装するのは難しいでしょう(私はそれを処理するたびにドメイン上のコンテキストに関する詳細を注入しなければならないので)... –