Załóżmy, że utworzyłem interfejs IFolderRepositoryz takimi metodami:
IEnumerable<Folder> GetAllFolders();
Folder GetFolderWithId(int id);
void AddFolder(Folder newFolder);
void ModifyFolder(Folder folderToModify, Folder folderAfterModification);
void RemoveFolder(Folder folderToRemove);
i wdrożyłem DatabaseFolderRepositoryi powiedzmy CacheFolderRepositoryDecorator. Teraz „setki linii później” Chciałbym dodać funkcjonalność folderów SkyDrive, więc jestem gotowy do dodania SkyDriveFolderRepository. Niestety, podczas gdy DatabaseFolderRepositoryimplementacja używała synchronicznych metod do komunikowania się z bazą danych, skydrive używa wielu asynci await. Co zrobić w takim przypadku? W przypadku metod void oznaczenie go jako asynchronicznego nie jest rozwiązaniem (potrzeba obsługi wyjątków). Czy powinienem zmienić interfejs, aby powrócić Task<T>? Pewnie, że zadziała w powyższym przykładzie, ale są to tylko 2 klasy implementacji interfejsu. A może większość moich interfejsów ma Tasktypy zwrotów (przeciwko tobie nie będzie to potrzebne)?
IFolderinterfejs, dlaczego polegasz na konkretnej implementacji (Folder) we wszystkich swoich metodach?