Здравствуйте, уважаемые форумчане!
Есть интерфейс IStorage, представляющий хранилище файлов:
public interface IStorage
{
IEnumerable<string> Entries { get; }
void Add(Stream stream, string entryName);
void Add(string fileName, string entryName);
void Extract(string entryName, Stream stream);
void Extract(string entryName, string fileName);
}
Есть несколько классов реализующих данный интерфейс, при этом один из этих классов реализует также IDisposable, т.к. содержит управляемый ресурс в качестве поля:
public sealed class ArchiveStorage : IStorage, IDisposable
{
private readonly ZipFile _zipFile;
public void Dispose()
{
_zipFile.Close();
}
// ...
}
Разрабатываемая система знает лишь интерфейс IStorage, а посему не может принудительно вызвать Dispose для освобождения ресурсов ArchiveStorage.
Имеет ли смысл в таком случае наследование IStorage от IDisposable и наличие пустых методов Dispose в классах, не содержащих ресурсов для освобождения или стоит просто закрыть глаза на частный случай в виде ArchiveStorage?
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. Мартин Фаулер