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)?