最近、私は、オブジェクトモデルとその結果の条件と副作用で、読み書き可能な依存関係の問題を大幅に減らすために、不変のオブジェクトを過度に使用すると主張しています。管理(一種の機能プログラミング - エスク)インターフェイスを使用して読み書きの問題を分ける最も良い方法は?
この習慣は、作成/構築時に値を提供される読み取り専用オブジェクトを作成し、外部呼び出し側が公開プロパティーにアクセスするためのパブリックgetterのみを使用できるようにしました。保護された内部および専用のセッターを使用すると、オブジェクトモデルへの書き込みよりも内部制御を維持できます。
インターフェイスを作成してオブジェクトモデルにAPIを作成するとき、私は不変性について同じ問題を検討し始めました。たとえば、私のインターフェースにパブリックゲッターだけを提供し、それを設定者に任せて、その設定をどのように扱うかを決定することができます。
public interface IValuableItem {
decimal Amount {get;}
string Currency {get;}
}
私は私が提供しなければならないかを不思議に着いしかし:
私が話しているの実装のための「読み取り専用」のインターフェースの例は、(単なるデモンストレーション用)この貴重なアイテムです(そしてもしあれば)を許可し、同じインタフェース内でこれらの操作を結合してその不変性を「汚す」ことがないようにします。
私の頭の上から、次の考えが頭に浮かんできました。私が賛否両論だと思っていることをそれぞれ提供することなく、とは何ですか?このコンセプトを管理するための業界で共通のコーディング方法がありますか?
// companion writer
public interface IValuableModifier {
decimal Amount {set;}
string Currency {set;}
}
又は
// explicit methods to enforce importance of or deviance in the programming
public interface IValuableModifier {
void SetAmount(decimal val);
void SetCurrency(string cur);
}
又は
// companion writer that inherits the original interface
public interface IValuableModifier : IValuableItem { //...
又は
// Let a concrete class choose one and/or the other.
class Concrete : IValuableModifer, IValuableItem { //...
又は
等..
それ以外の不変なプログラミングモデルで書くのを手伝ってもらい、それを適度に柔軟に保つことができます。
'set'アクセサのみを提供する' public'または 'protected'プロパティを持つクラスはコード解析の警告を発します[CA1044:プロパティは書き込み専用ではありません](https://msdn.microsoft.com/ ja-jp/library/ms182165.aspx)。 – DavidRR