域模型上的切换逻辑

本文关键字:模型 | 更新日期: 2023-09-27 17:59:56

我目前正在使用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上有一个标志(将由用户检查)来触发新的计算,该怎么办。比方说,现在的月利率将除以5,而不是除以30。有什么建议吗?谢谢

域模型上的切换逻辑

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);

这适用于更复杂的情况。在你的情况下,它可能设计得太过分了。希望你得到点

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

您可以将值声明为属性并从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 { }
    }
}