【发布时间】:2021-05-19 03:04:22
【问题描述】:
我有两个模型接口ILoanModel和IAmortizationModel。
public interface ILoanModel
{
string ID { get; set; }
IEmployeeModel Borrower { get; set; }
// ******* other propeties *********
ICollection<Model.IAmortizationModel> AmortizationTable { get; set; }
}
public interface IAmortizationModel
{
string ID { get; set; }
ILoanModel Loan { get; set; }
// ******* other propeties *********
}
我创建另一个接口来处理计算和其他功能
public interface IAmortization
{
// Compute and generate amortization table
Model.ILoanModel Generate(Model.ILoanModel loan);
// **** Other function *****
}
目前我有3种贷款,它们都有相同的计算和摊销表的生成方式。
public abstract class Amortization : Controller.Computation.Interface.IAmortization
{
public virtual Model.ILoanModel Generate(Model.ILoanModel loan)
{
// **** other code *******
//Create the amortization table
decimal last_Amortization_RunningBalance = loan.Amount;
loan.AmortizationTable = new List<Model.IAmortizationModel>();
for (int x = 1; loan.NumberOfPayment >= x; x++)
{
// having problem here because Model.IAmortizationModel is a interface
var newAmortizationRow = new Model.IAmortizationModel
{
ID = Guid.NewGuid().ToString(),
AmortizationAmount = loan.AmortizationPaymentAmount,
AmortizationInterest = loan.AmortizationPaymentAmount* loan.Nominal,
AmortizationPrepayment =
loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal),
AmortizationOutstandingBalance =
last_Amortization_RunningBalance
- (loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal)),
Sequence = x
};
last_Amortization_RunningBalance -=
newAmortizationRow.AmortizationOutstandingBalance;
loan.AmortizationTable.Add(newAmortizationRow);
}
}
}
我现在的问题是生成新的IAmortizationModel,它将被添加到loan.AmortizationTable。如何获取loan.AmortizationTable的类型并创建?
【问题讨论】:
-
你为什么使用接口?您是否有多种贷款模型和摊销模型的实现?如果你这样做了,并且你确实需要实例化一个对象,你可以使该方法成为通用方法并为其添加
new()约束。 -
@IanMercer 是的,对汽车贷款和紧急贷款进行抽样。汽车贷款有字段需要指定汽车品牌和型号,而紧急贷款需要紧急情况。
-
恕我直言,添加一个
protected abstract IAmortizationModel Factory(...)方法。
标签: c# oop abstract-class