場合によっては、実用上の理由から「裏打ち」を必要とする財産があります。バッキングプロパティの名前付け(およびマップ)方法は?
たとえば、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"プロパティのセットメソッドに直接組み込まれていた場合、オブジェクトがデータベースから水和されたときにトリガされるからですが欲しいです。
これはすべて正常に動作します。
このタイプをクエリする必要があるとき、そのプロパティがマップされていないため、Person.Nameをクエリしようとすると機能しません。
私がこれについて嫌うのは、Person.Nameに対してコードを書いているが、Person._nameに対するクエリを書く必要があります。これはエラーが発生しやすく混乱します。
この問題を解決するには、より良い方法がありますか?
だから、これは直接バッキングフィールドをマッピングし、そしてなどのプロパティを必要としないのですか? (プロパティをマッパーするのではなく、ペナルティやその他の副作用がありますか?) –
はい、まさにそうです。ペナルティはありません。これはプロパティgetters/setterのコードで副作用を避けるため、プロパティを正確にマップするための推奨される方法です。 – TomMhC
誰もあなたにこのようなことを教えてくれませんか? :-) ... ありがとうございました! –