Предположим, я создал интерфейс 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 one использует много async
и await
. Что делать в таком случае? В случае void методов, помечающих это, асинхронность не является решением (необходимость обработки исключений). Должен ли я изменить интерфейс, чтобы вернуться Task<T>
? Конечно, это будет работать в приведенном выше примере, но это всего лишь 2 класса реализации интерфейса. Или у большинства моих интерфейсов должны быть Task
типы возврата (против вас это правило не понадобится)?
IFolder
интерфейс, почему вы полагаетесь на конкретную реализацию (Folder
) во всех ваших методах?