2011-06-20 3 views
2

私は現在、ASP.NET MVC3とEntity Framework 4.1コードファーストを使用してアプリケーションを開発しています。また、少しずつDDDを適用しようとしています。 、今のところ、このコードは動作しますが、私は新しい計算のためのトリガビューに(ユーザーによってチェックされます)フラグを持つことでしょう場合をドメインモデルのスイッチングロジック

public class ClassA 
{ 
    public decimal MonthlyRate { get; set; } 
    public virtual decimal DailyRate 
    { 
     get { return this.MonthlyRate/30; } 
     private set { } 
    } 
} 

は私がのモデルを持っています。フラグを30で割るのではなく、今月のレートを5で割るとしましょう。ありがとう。

答えて

1
interface IDivideLogic 
{ 
    int DivideNumber{get;set;} 
} 

class DivideLogic : IDivideLogic 
{ 
    public DivideLogic() 
    { 
     DivideNumber = 30; 
    } 
    public DivideLogic(int divideNumber) 
    { 
     DivideNumber = divideNumber; 
    } 
    public int DivideNumber{get;set;} 
} 

public class ClassA 
{ 
    public IDivideLogic DivideLogic {get;set;} 
    public decimal MonthlyRate { get; set; } 
    public virtual decimal DailyRate 
    { 
     get { return this.MonthlyRate/DivideLogic.DivideNumber; } 
     private set { } 
    } 
} 

その後、あなたは

ClassA obj = new ClassA(); 
obj.DivideLogic = new DivideLogic(5); 

をしたいときには、より複雑な状況に適しています、これを切り替えることができます。あなたの状況では、あまりにも過剰に設計されているかもしれません。あなたがポイントを得ることを願っています

+0

ありがとうございます。私はあなたのポイントを持っていますが、値が固定されていればどうなりますか?フラグは、元のドメインの代わりに他の値を使用するようドメインに通知するだけですか? – gnaungayan

+0

いくつかのDivideLogicオブジェクトを異なる定義済みの値で作成し、それらのオブジェクトをDivideLogicプロパティ – Stecya

+0

okに設定するだけです。この方法はDDDを検証しないのですか?私はまだそれを学んでいるので私は確信していないが、私が読んだ記事に基づいて、ドメインモデルは行動/計算/ロジックを持っている必要があります。 – gnaungayan

1

これに戦略パターンを使用できます。ディビジョンロジックのさまざまな実装を使用できます。それ以上の変更を予想したいと仮定すると、これはこの問題を解決する良い方法になります。このようにして、ディビジョンロジックを他のロジックから抽象化して、ディビジョンロジックのさまざまな実装を簡単に実装できます。

+0

私はそれを使用することを考えていました、私はベースクラスを持っている必要がありますか?共通の計算を持ってそれを派生したクラスに上書きしますか?しかし、それでは、どうやってDBに残すべきですか? – gnaungayan

1

値をプロパティとして宣言し、UIから割り当てることができます。

public class ClassA 
{ 
    public decimal MonthlyRate { get; set; } 
    public int YourProperty {get; set;} 

    public ClassA(int yourProperty) 
    { 
     YourProperty = yourProperty; 
    } 

    public virtual decimal DailyRate 
    { 
     get { return this.MonthlyRate/YourProperty; } 
     private set { } 
    } 
} 
関連する問題