Supongamos que he creado una interfaz IFolderRepositorycon métodos como ese:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
y lo he implementado DatabaseFolderRepositoryy digamos CacheFolderRepositoryDecorator. Ahora 'cientos de líneas después' me gustaría agregar funcionalidades de carpetas SkyDrive, así que estoy listo para agregar SkyDriveFolderRepository. Desafortunadamente, mientras que la DatabaseFolderRepositoryimplementación usó métodos sincrónicos para hablar con la base de datos, skydrive one usa mucho asyncy await. ¿Qué hacer en tal caso? En el caso de los métodos nulos, marcarlo como asíncrono no es una solución (necesita un manejo excepcional). ¿Debo cambiar la interfaz para volver Task<T>? Claro que funcionará en el ejemplo anterior, pero son solo 2 clases de implementación de interfaz. ¿O debería la mayoría de mis interfaces tener Tasktipos de retorno (en contra de usted no va a necesitar que la regla)?
IFolderinterfaz, ¿por qué confía en la implementación concreta (Folder) en todos sus métodos?