Załóżmy, że utworzyłem interfejs IFolderRepository
z 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 DatabaseFolderRepository
i powiedzmy CacheFolderRepositoryDecorator
. Teraz „setki linii później” Chciałbym dodać funkcjonalność folderów SkyDrive, więc jestem gotowy do dodania SkyDriveFolderRepository
. Niestety, podczas gdy DatabaseFolderRepository
implementacja używała synchronicznych metod do komunikowania się z bazą danych, skydrive używa wielu async
i 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 Task
typy zwrotów (przeciwko tobie nie będzie to potrzebne)?
IFolder
interfejs, dlaczego polegasz na konkretnej implementacji (Folder
) we wszystkich swoich metodach?