Supposons que j'ai créé une interface IFolderRepositoryavec des méthodes comme celle-ci:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
et j'ai implémenté DatabaseFolderRepositoryet disons CacheFolderRepositoryDecorator. Maintenant, «des centaines de lignes plus tard», j'aimerais ajouter la fonctionnalité des dossiers SkyDrive, donc je suis prêt à ajouter SkyDriveFolderRepository. Malheureusement, alors que l' DatabaseFolderRepositoryimplémentation utilisait des méthodes synchrones pour parler avec la base de données, skydrive one utilise beaucoup de asyncet await. Que faire dans un tel cas? En cas de méthodes vides, le marquer comme async n'est pas une solution (nécessité de gérer les exceptions). Dois-je changer d'interface pour revenir Task<T>? Bien sûr, cela fonctionnera dans l'exemple ci-dessus, mais ce ne sont que 2 classes d'implémentation d'interface. Ou la plupart de mes interfaces devraient-elles avoir des Tasktypes de retour (par contre, vous n'en aurez pas besoin)?
IFolderinterface, pourquoi comptez-vous sur une implémentation concrète (Folder) dans toutes vos méthodes?