我有“感觉”我的设计调用一个方法在构造函数中加载数据是不对的。
我尝试编写一个类,为发票,订单或报价记录提供执行计算(折扣,税金,总金额等)的基本逻辑。 在大多数情况下,需要相同的属性集(例如,属性“数量”存在于所有实体/表中)。
在我目前的设计中使用这个基类(请注意,这不是真正的代码,我在家里并且无法访问代码库,因此可能存在拼写错误):
public abstract class HeadCalculationEngineBase
{
protected readonly IOrganisationService orgService;
protected decimal pricePerUnit;
protected decimal quantity;
public HeadCalculationEngineBae(Guid entityid, IOrganisationService service)
{
this.orgService = service;
this.populate(this.loadEntityData(id));
}
public virtual Entity loadEntityData(Guid id)
{
var columns = new ColumnSet("pricePerUnit", "quantity");
return this.orgService.Retrieve(id, columns);
}
protected virtual populate(Entity data)
{
this.pricePerUnit = data["pricePerUnit"];
this.quantity = data["quantity"];
}
}
这个设计让我可以选择覆盖虚拟成员并为发票实体的实现加载其他属性:
public class HeadCalculationInvoiceEngine : HeadCalculationEngineBase
{
protected decimal discount;
public HeadCalculationInvoiceEngine(Guid entityid, IOrganisationService service)
:base(entityid, service)
{ }
public override Entity loadEntityData(Guid id)
{
var columns = new ColumnSet("pricePerUnit", "quantity", "discount");
return this.orgService.Retrieve(id, columns);
}
protected override populate(Entity data)
{
this.pricePerUnit = data["pricePerUnit"];
this.quantity = data["quantity"];
this.discount = data["discount"];
}
}
所以我的问题归结为一个问题:我应该在构造函数中加载数据吗?
答案 0 :(得分:3)
最好保持构造函数的轻量级,避免长时间的远程调用。