我正在尝试使用存储库模式在现有 DB2 模式上编写数据访问层。这个模式有几个聚合,它们都有一个“文档”的公共基础实体。在构建业务对象时,我将 Document 实体创建为抽象,并将聚合创建为从 Document 派生的实体。例如:
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 存储库中加载所有 Document 基本属性,因此我创建了另一个具有通用类型参数的抽象类用于此功能. 但是,我有编码器的块来确定如何返回抽象文档实体的实例,存储库将使用该实例我将为派生的聚合实体编码。我可以通过反射来做到这一点,如下所示,但感觉全错了。
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;
}
}
我整个人都扭曲了。有人可以向我保证这没问题,或者告诉我我是个白痴并告诉我更好的方法吗?
提前致谢。