我有以下课程设计。完整代码可在“如何使用泛型实现此功能? ”中找到。该代码工作正常,并解决了“重构代码以避免类型转换”中提到的转换问题
在RetailInvestmentReturnCalculator
类中,该GetInvestmentProfit()
方法利用抽象基类CalculateBaseProfit()
中存在的方法。InvestmentReturnCalculator
这一事实在类设计中并不明显。
问题
- 如何重构此类设计以传达上述事实?
- 防止此类设计错误的设计指南是什么?
我们所说的软件架构是什么意思?对我来说,架构这个术语传达了系统核心元素的概念,即难以改变的部分。其余部分必须建立的基础
类图
抽象的
public abstract class InvestmentReturnCalculator
{
#region Public
public double ProfitElement { get; set; }
public abstract double GetInvestmentProfit();
#endregion
#region Protected
protected double CalculateBaseProfit()
{
double profit = 0;
if (ProfitElement < 5)
{
profit = ProfitElement * 5 / 100;
}
else
{
profit = ProfitElement * 10 / 100;
}
return profit;
}
#endregion
}
public abstract class InvestmentReturnCalculator<T> : InvestmentReturnCalculator where T : IBusiness
{
public T BusinessType { get; set; }
}
具体的
public class RetailInvestmentReturnCalculator : InvestmentReturnCalculator<IRetailBusiness>
{
public RetailInvestmentReturnCalculator(IRetailBusiness retail)
{
BusinessType = retail;
//Business = new BookShop(100);
}
public override double GetInvestmentProfit()
{
ProfitElement = BusinessType.GrossRevenue;
return CalculateBaseProfit();
}
}