ビジネスコードの検証を行いたいです。これを行うには2つの方法を考えています。
1 つ目は、次の方法でクラス プロパティ セッターの検証を行うことです。
class Student{
public string Name{
get { return _name; }
set {
if (value.IsNullOrEmpty) throw exception ...
}
}
}
さて、このアプローチの問題は、名前が割り当てられるたびに検証コードが実行されることです。これは、DB からのデータを入力する場合など、必要ない場合があります。
私が好む2つは、これらのエンティティクラスに静的メソッドを配置します。
class Student {
public **static** void ValidateName(**string name**) {
if (string.IsNullorEmpty(name))
{
throw ...
}
...
}
次のように、インスタンス メソッドではなく静的メソッドを使用していることに注意してください。
class Student{
public void Validate() {
// validation logic on instance properties
if (string.IsNullorEmpty(Name))
{
throw ...
}
...
}
常に Student obj が渡されるとは限らないためです。メソッドに渡される文字列名のようなプリミティブ型を取得することがよくあります。
public static FindStudentByName(string name)
{
// here I want to first do validation
Student.ValidateName(name);
// query DB
...
}
学生オブジェクトに渡された場合は、もちろんできます
public static AddStudent(Student s)
{
// call the instance method
s.Validate();
}
さて、私は物事を非常にシンプルにしたいので、次のアプローチのいずれにも行きたくありません
[StringLength(25)] などのプロパティで属性を使用します。
1 つ目は、これにはリフレクションが必要であり、パフォーマンスに影響を与えるため、パフォーマンスを低く抑えるためのトリックがありますが、ここでも、よりシンプルに保ちたいと考えています。
2 つ目は、自分のサイトを Medium Trust で実行できるようにしたいということです。私が理解しているように、完全な信頼が必要です。
MS など、そこにある検証ブロックのいずれかを使用します。CodePlex にある Enterprise Library など。
では、この件についてご意見をお聞きしたいのですが、
私が行っているアプローチの潜在的な問題は何ですか?
このアプローチは、他のアプローチよりも優れたパフォーマンスを発揮し、読みやすく、維持しやすいでしょうか?
中間層での検証はどのように行っていますか?
たくさんありがとう!
レイ。