Supponiamo di aver creato un'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 la funzionalità delle cartelle SkyDrive, quindi sono pronto per aggiungere SkyDriveFolderRepository
. Sfortunatamente mentre l' DatabaseFolderRepository
implementazione utilizzava metodi sincroni per parlare con il database, skydrive uno usa molto async
e 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 Task
tipi di ritorno (contro di te non ne avrai bisogno)?
IFolder
un'interfaccia, perché fai affidamento su un'implementazione concreta (Folder
) in tutti i tuoi metodi?