いくつかのケースでは、私は実際的な理由で「バッキングプロパティ」を必要とするプロパティを持っています。
たとえば、Nameプロパティを持つ1つのタイプがあります。アクセス時に発生する値の変換はなく、ある種のアクションをトリガーするだけです。あなたがそうするなら、副作用。(議論のために重要であるというわけではありませんが、この特定のケースでは、名前は変更されたときに別の場所にコピーされます。)
まあ言ってみれば:
public class Person
{
private string __name;
protected internal virtual string _name
{
get
{
return this.__name;
}
set
{
this.__name = value;
}
}
public virtual string Name
{
get
{
return _name;
}
set
{
_name = value;
// action when changing the name takes place here...
}
}
}
したがって、「_ name」プロパティはデータベースにマップされますが、直接変更できないように保護/内部的に保持されます。そして、2番目のパブリックプロパティ「Name」が実際のアクセスを提供します。
私がこのように設定した理由は、そのアクションがマップされた「_name」プロパティのset-methodに直接組み込まれている場合、オブジェクトがデータベースからハイドレイトされたときにトリガーされるためです。これは私が望んでいることではありません。
これはすべて問題なく機能します。
問題は、このタイプをクエリする必要がある場合、そのプロパティがマップされていないため、Person.Nameをクエリしようとしても機能しないことです。
私がこれについて嫌いなのは、Person.Nameに対してコードを記述しているが、Person._nameに対してクエリを記述しなければならないという事実です。これは、エラーが発生しやすく、混乱を招きます。
この問題を解決するためのより良い方法はありますか?