在域模型上切换逻辑

时间:2011-06-20 08:47:32

标签: c# asp.net-mvc-3 entity-framework-4.1

我目前正在使用ASP.NET MVC3和Entity Framework 4.1 Code First开发应用程序,并且我一点一点地尝试应用DDD,因为我才开始学习它。

我有一个模特:

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

现在,这段代码可以工作,但是如果我在一个新计算的View触发上有一个标志(将由用户检查),该怎么办呢。让我们说国旗而不是将它除以30,现在每月费率将除以5.任何建议?感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用策略模式。您可以使用除法逻辑的各种实现。假设您希望进一步改变,这将是解决此问题的好方法。通过这种方式,您可以将除法逻辑从其他逻辑中抽象出来,从而可以轻松实现除法逻辑的不同实现。

答案 1 :(得分: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 { }
    }
}

答案 2 :(得分: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);

这适用于更复杂的情况。在你的情况下,它可能太过于设计。希望你明白这一点