У меня есть «чувство», что мой проект вызывает метод загрузки данных внутри конструктора, является неправильным.Конструктор Конструкция - Загрузка данных внутри конструктора (C#)
Я пытаюсь написать класс, который предоставляет основную логику для расчета (скидка, налога, общей суммы и т. Д.) Для счетов-фактур, заказов или кавычек. В большинстве случаев тот же набор необходимых атрибутов (например, атрибут «количество» присутствует во всех сущностях/таблицах).
В моем текущем дизайне использует этот базовый класс (обратите внимание, что это не реальный код, я нахожусь дома и не имею доступ к кодовой базе, поэтому опечатки, скорее всего):
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"];
}
}
Так что моя проблема сводится к вопросу: Должен ли я загрузить данные внутри конструктора?
Виртуальные вызовы методов в конструкторе могут быть проблематичными - http://stackoverflow.com/a/119543/16391 – StingyJack