Припустимо, я створив інтерфейс IFolderRepositoryз такими методами:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
і я реалізував DatabaseFolderRepositoryі дозволяю сказати CacheFolderRepositoryDecorator. Тепер "сотні рядків пізніше" я хотів би додати функціональність папок SkyDrive, тому я готовий додати SkyDriveFolderRepository. На жаль, поки DatabaseFolderRepositoryреалізація використовувала синхронні методи для розмови з базою даних, у програмі skydrive використовується багато asyncі await. Що робити у такому випадку? У разі недійсних методів, що позначають його асинхронізацією, не є рішенням (необхідність обробки обставин). Чи потрібно змінити інтерфейс, щоб повернутися Task<T>? Впевнений, що він буде працювати у наведеному вище прикладі, але це лише два класи впровадження інтерфейсу. Або у більшості моїх інтерфейсів є Taskтипи повернення (проти цього вам не потрібно це правило)?
IFolderінтерфейс, чому ви покладаєтесь на конкретну реалізацію (Folder) у всіх своїх методах?