我试图使用Repository模式在现有DB2模式上编写数据访问层。这个模式有几个聚合,所有聚合都有一个“文档”的公共基础实体。在构建业务对象时,我将文档实体创建为抽象,并将聚合创建为从文档派生的实体。例如:
public abstract class Document
{
public long Id{ get; set; }
public int PageCount{ get; set; }
public string Path{ get; set; }
}
public class LegalDocument : Document
{
public int CaseNumber{ get; set; }
}
public class BillingDocument : Document
{
public int InvoiceNumber{ get; set; }
public double AmountDue{ get; set; }
}
现在,我想为BillingDocument创建一个存储库,但我知道我不想在我的BillingDocument存储库中加载所有文档库属性,因此我为这个功能创建了另一个带有泛型类型参数的抽象类。然而,我正在让coder's block研究如何返回抽象文档实体的实例,我将为派生聚合实体编写代码的存储库将使用该实例。我可以用反射来做,如下所示,但感觉完全错了。
abstract class DocumentRepositoryBase<TDocument>
{
internal Document LoadDocumentBaseProperties(long documentId)
{
//Call the database and get the base properties and add them to....this?
var documentBase =
(Document)typeof(TDocument).GetConstructor(Type.EmptyTypes).Invoke(null);
//Set the documentBase properties
return documentBase;
}
}
提前谢谢。