Я пытаюсь использовать шаблон хранилища для записи уровня доступа к данным в существующей схеме DB2. Эта схема имеет несколько агрегатов, все из которых имеют общую базовую структуру документа. При создании бизнес-объектов я создал объект 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;
}
}
Я все искривлен. Может кто-то, пожалуйста, уверяю меня, что это нормально, или скажите мне, что я идиот и показываю мне лучший способ?
Заранее спасибо.
Все. Боже, спасибо, я не мог думать об этом ради жизни. –