Estoy escribiendo una aplicación que crea un "Catálogo" de archivos, que puede atribuirse a otros archivos de metadatos como archivos adjuntos y miniaturas.Quién debería ser responsable de cerrar una secuencia
Estoy tratando de abstraer la interfaz de un catálogo hasta el punto en que un consumidor de un catálogo no necesita saber sobre el sistema de archivos subyacente utilizado para almacenar los archivos. Así que he creado una interfaz llamada IFileSystemAdaptor
que se muestra a continuación.
public interface IFileSystemAdaptor:IDisposable
{
void WriteFileData(string fileName, Stream data);
Stream ReadFileData(string filename);
void DeleteFileData(string filename);
void ClearAllData();
void WriteMetaFileData(string filename, string path, Stream data);
Stream ReadMetaFileData(string filename, string path);
void DeleteMetaFileData(string filename, string path);
void ClearMetaFilesData(string filename);
}
Esencialmente mi interfaz IFileSystemAdaptor expone una lista plana de archivos, que también puede estar asociado con los archivos adicionales de metadatos.
Como puede ver, estoy usando referencias a objetos genéricos Stream
para abstraer la interfaz de los datos de un archivo. De esta forma, una implementación de un catálogo podría devolver archivos desde un disco duro, mientras que otra podría devolver los datos desde un servidor web.
Ahora estoy tratando de averiguar cómo evitar que mi programa deje las transmisiones abiertas. ¿Existe una regla de oro para los miembros que deben cerrar las transmisiones? Si el consumidor de un flujo lo cierra, o el miembro que creó el flujo original será responsable de cerrarlo.
¡Gran respuesta! ¡Gracias! –
Generalmente un buen conjunto de reglas, aunque agregaría una cuarta: al aceptar un flujo (u otro 'IDisposable') en un constructor o método de fábrica, si el objeto construido puede sobrevivir a cualquier otra persona que realmente conozca el flujo encapsulado/objeto, uno debe proporcionar una * opción * para que el método 'Dispose' del objeto construido también elimine el flujo/objeto encapsulado. – supercat