Supongamos que he creado una interfaz IFolderRepository
con 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 DatabaseFolderRepository
y 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 DatabaseFolderRepository
implementación usó métodos sincrónicos para hablar con la base de datos, skydrive one usa mucho async
y 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 Task
tipos de retorno (en contra de usted no va a necesitar que la regla)?
IFolder
interfaz, ¿por qué confía en la implementación concreta (Folder
) en todos sus métodos?