域模型上的切换逻辑
本文关键字:模型 | 更新日期: 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 { }
}
}