У меня есть следующий пример кода:
public interface IRepository {
// Whatever
}
public class SampleRepository : IRepository {
// Implements 'Whatever'
}
public class NHibernateRepository : IRepository, IDisposable {
// ...
public void Dispose() { ... }
}
Теперь - это действительно плохо? Я не уверен, но это похоже на без маркировки деструктор базового класса virtual в C ++
.
Я не хочу, чтобы интерфейс IRepository
реализовывал IDisposable
, потому что это привело бы к нежелательной сложности и кучке классов, которые также должны были бы реализовать IDisposable
].
Как следует поступать в этом случае?
Я уверен, что это может произойти с любой иерархией типов - когда один из производных типов должен управлять одноразовыми ресурсами.
Итак, что мне делать - подтянуть IDisposable
к самому первому интерфейсу или оставить его как есть и надеяться, что пользователь будет различать одноразовые и одноразовые репозитории?
Спасибо.