Supponiamo di aver creato l'interfaccia IFolderRepository con 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 DatabaseFolderRepository e diciamo CacheFolderRepositoryDecorator . Ora 'centinaia di righe dopo' Vorrei aggiungere funzionalità di cartelle SkyDrive quindi sono pronto ad aggiungere SkyDriveFolderRepository . Sfortunatamente mentre l'implementazione DatabaseFolderRepository utilizzava metodi sincroni per parlare con il database, skydrive uno usa un sacco di async e await . Cosa fare in questo caso? In caso di metodi void, contrassegnarlo come asincrono non è una soluzione (è necessario gestire le eccezioni). Devo cambiare interfaccia per restituire 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 tipi di ritorno Task (contro il quale non avrai bisogno della regola)?