В дикой природе нет такой вещи, как определенно хорошая или плохая практика, у каждого есть свои плюсы и минусы.
Практика становится хорошей или плохой, только когда она применяется к конкретной проблеме (читай: не IFoo
).
public bool IsGood<TContext>(IPractice practice)
where TContext : RealWorldApplication, new();
Итак, вместо того, чтобы пытаться найти руководство по MSDN, задайте себе следующий вопрос:
Делает ли эторешить проблему и сделать код более простым для чтения?
Если ответ да , воспользуйтесь им.
Лично мне нравится подход.Если контракт на IFoo
требует надлежащей утилизации (подумайте: IGraphicalObject
, IResource
, IConnection
), это очень хорошее дизайнерское решение, чтобы сделать это явным.
ДонНе попадайтесь в ловушку: программирование с интерфейсами делает вас менее зависимыми от конкретных реализаций, но программирование только с интерфейсами может быть кошмаром.Будьте разумны, вот и все.
Обновление
Вы можете использовать Google, чтобы найти все интерфейсы, которые наследуются от IDisposable
в самом .NET Framework:
intitle:interface "inherits idisposable" site:msdn.microsoft.com
Как я уже говорил выше, это обычно делается для объектов, которые известны для использования ресурсов, таких как соединения с базой данных, обертки неуправляемых объектов, графическиеобъекты и так далее.
Наложение реализации Dispose()
на класс, в котором нечего утилизировать , было бы плохой идеей.
В этом случае лучше оставить его необязательным ипроверьте поддержку IDisposable
, как предложено Питером 1056 *.