Припустимо, я створив інтерфейс 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
) у всіх своїх методах?