Supponiamo di aver creato un'interfaccia IFolderRepositorycon metodi del genere:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
e ho implementato DatabaseFolderRepositorye diciamo CacheFolderRepositoryDecorator. Ora "centinaia di righe dopo" vorrei aggiungere la funzionalità delle cartelle SkyDrive, quindi sono pronto per aggiungere SkyDriveFolderRepository. Sfortunatamente mentre l' DatabaseFolderRepositoryimplementazione utilizzava metodi sincroni per parlare con il database, skydrive uno usa molto asynce await. Cosa fare in tal caso? In caso di metodi nulli che lo contrassegnano come asincrono non è una soluzione (è necessario gestire l'eccezione). Devo cambiare interfaccia per tornare Task<T>? Sicuramente funzionerà nell'esempio sopra ma sono solo 2 classi di implementazione dell'interfaccia. O la maggior parte delle mie interfacce dovrebbe avere Tasktipi di ritorno (contro di te non ne avrai bisogno)?
IFolderun'interfaccia, perché fai affidamento su un'implementazione concreta (Folder) in tutti i tuoi metodi?