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?Odpowiedzi:
Prawdopodobnie ten artykuł MSDN o praktykach asynchronicznych będzie dobrym lektorem.
Zapytałeś:
W tym miejscu podsekcja
Async All the Way
w artykule MSDN, który podłączyłem, będzie związana z twoją sytuacją.Ponieważ masz co najmniej jeden interfejs, który musi być asynchroniczny, YAGNI jest odwrócony. Państwo to będzie trzeba wprowadzić zmiany tak, że interfejsy są spójne. Tak, będzie to dla ciebie więcej wysiłku. Ale korzyścią jest mniejsze ryzyko impasu; mniej skomplikowane debugowanie; i bardziej przewidywalne blokowanie (kiedy faktycznie musi nastąpić).
Pomijam niektóre inne pytania, które zadałeś, ponieważ myślę, że odniosłem się do sedna twojego pytania. Zajmij się rdzeniem, a reszta twoich pytań odpada. Artykuł jest dość zaangażowany i dotyczy innych poruszonych kwestii, a także wskazuje dodatkowe pułapki.
Programowanie asynchroniczne jest jednym z tych, w których musisz przyjąć całą koncepcję i po prostu iść z nią. Próba po prostu „zanurzenia palców” na kawałku sprawia, że jest o wiele bardziej skomplikowana niż po prostu skakanie prosto.
źródło