Suponha que eu criei uma interface IFolderRepository
com 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 DatabaseFolderRepository
e 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 DatabaseFolderRepository
implementação usou métodos síncronos para conversar com o banco de dados, o skydrive usa muitos async
e 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 Task
tipos de retorno (contra você não vai precisar disso)?
IFolder
interface, por que você confia na implementação concreta (Folder
) em todos os seus métodos?