У меня есть ряд статических классов репозитория, которые хранят и извлекают объекты данных. Я хочу предоставить им некоторые общие функции, поэтому я наследую их от абстрактного класса.Дизайн статических классов с общей функциональностью через наследование
Это не работает, поскольку статические классы не допускаются к наследованию. Я верю в .NET-проект, поэтому я согласен с тем, что это по уважительной причине.
Итак, это заставляет меня поверить, что здесь есть некоторые фундаментальные проблемы с дизайном.
Вопрос: как мне создать свой код для достижения результата, который я ищу? Или это просто вопрос о том, чтобы повторить методы во всех моих классах. Возможно, синглтон?
Static Repo:
public static class CreditMemos : InvoiceRepository<CreditMemo>
{
public static List<CreditMemo> GetByDocumentNumber(string documentNumber)
{
return CheckCache(
ConvertReaderToCreditMemos(
Invoices.GetByDocumentNumber<CreditMemo>(documentNumber)));
}
}
Желаемая Основание:
abstract class InvoiceRepository<t>
where t: DataObjects.Invoice
{
static List<t> invoiceCache = new List<t>();
static protected List<t> CheckCache(List<t> results)
{
foreach (var result in results)
if (!invoiceCache.Any(p => p.ID == result.ID))
invoiceCache.Add(result);
return invoiceCache.Where(p => results.Any(a => a.ID == p.ID)).ToList();
}
}
Вы могли бы рассмотреть возможность использования инъекции зависимостей, которые могли бы позволить вам использовать один экземпляр нестатический репозиторий легче. – blins
И вот почему существуют синглтоны. – Will
Если вы вообще интересуетесь об модульном тестировании, используйте инъекцию зависимости интерфейса. Это значительно облегчит вам жизнь. –