私は見解を取ります:
a)本当に便利なビジネス上の制約でPOCOを飾ります。とりわけMVCとEFは、あなたにとって重要な制約のいくつかをチェックします。
b)カスタム注釈またはその他のビジネスルールのチェックをPOCOに追加できます。
興味がある場合は、サンプルのブローを参照してください。
c)DB固有のアノテーションはEFfluentAPIに属します。 それらがDB固有であり、私の見解ではPOCOに属していない場合。たとえば、テーブル名、スキーマ、外部キー、関連付けマップ、列の名前変更と無視など。
d)エラーメッセージと表示テキストはモデルビューに属します。または、少なくとも以下のPOCOの例から抽出されます。私は人々が二重の努力を嫌い、モデルビューとしてPOCOを使用し、簡単なテキストとエラーメッセージの処理を好むことを知っています。しかし、私は多言語で構成可能な完全なエラーメッセージ/テキスト処理ソリューションを好みます。POCOにテキストを貼り付けることは、私の見解では最善の解決策ではありません。
明らかにスタイルとビルドサイズが選択に影響を与え、多くの人がd)に同意しませんが、私はそれに関して大きな問題はありません。私は全体像のデザインパターンビューを撮り、それが理にかなっているところで分離して抽象化するように見えます。
ここに、注釈なしのPOCOの追加サンプルが少しありますが、そうであった可能性があります。注釈付きの素晴らしい例もいくつか見ました。このスタイルのエラーはMVCで使用でき、私の見解では注釈のテキストよりも優れています。
public class POCODemo : IValidatableObject //various ways to trigger this. Some for free
/// poco members .... bla bla
//Support Business rules...
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var vResult = base.Validate(validationContext).ToList();
if (Poco.property1 || poco.property is nasty or xyz issue)//psuedo code for your check
var memberList = new List<string> { "PropertyName1" };
var err = new ValidationResult("Some Text comes from your TEXTPOOL of choice that explains the error", memberList);
vResult.Add(err);
// }
}
return vResult;
}