Suponha que eu criei uma interface IFolderRepositorycom métodos assim:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
e eu implementei DatabaseFolderRepositorye vamos dizer CacheFolderRepositoryDecorator. Agora, 'centenas de linhas depois', gostaria de adicionar a funcionalidade das pastas do SkyDrive para estar pronto para adicionar SkyDriveFolderRepository. Infelizmente, enquanto a DatabaseFolderRepositoryimplementação usou métodos síncronos para conversar com o banco de dados, o skydrive usa muitos asynce await. O que fazer nesse caso? No caso de métodos nulos marcando-o como assíncrono, não é uma solução (é necessário um tratamento de exceção). Devo alterar a interface para retornar Task<T>? Claro que funcionará no exemplo acima, mas são apenas duas classes de implementação de interface. Ou a maioria das minhas interfaces deve ter Tasktipos de retorno (contra você não vai precisar disso)?
IFolderinterface, por que você confia na implementação concreta (Folder) em todos os seus métodos?