Mam aplikację. Ta aplikacja używa interfejsu do dostępu do bazy danych. Ten interfejs może być implementowany przez wiele klas. Na przykład jeden używa EF 4.4, ale inne klasy mogą używać EF5, który jest bardziej wydajny. W przyszłości może będę używał EF6, ponieważ używa on metod asynchronicznych. W tym przykładzie wszystkie metody używają EF, ale być może inne opcje mogą być użyte w inny sposób.Interfejsy i metody asynchroniczne
Aplikacja jest zakodowana jeden raz, używając interfejsu i zgodnie z plikiem konfiguracyjnym, użyj jednej lub drugiej implementacji, więc muszę tylko zmodyfikować kod w jednym miejscu, konstruktorze, aby dodać nową opcję w tworzenie instancji klasy przypisanej do interfejsu.
W tej chwili wszystkie metody klas nie są async
, ale w przyszłości, jeśli używam EF6 Chciałbym użyć metod asynchronicznych, więc nie wiem, czy jest możliwe, że klasa, która używa EF6 i implementuje interfejs może korzystać z metod async
.
Dla asynchronicznych metod EF6 użyłbym wzoru async/awiat, więc w metodzie mojej klasy muszę użyć atrybutu async. Dzięki temu mogę użyć słowa kluczowego await
, gdy wywołuję metodę asynchroniczną EF6.
Ale ta klasa może implementować interfejs, który po raz pierwszy dotyczy metod synchronicznych?
Czy jest jakiś sposób, że w głównej aplikacji mogę używać wielu implementacji bez potrzeby modyfikacji kodu? Niektóre implementacje będą korzystać z metod asynchronicznych, podczas gdy inne będą synchroniczne.
Należy pamiętać, że 'async' nie jest częścią podpisu; metoda asynchroniczna i nie asynchroniczna mogą implementować tę samą metodę interfejsu. – Servy
To nie jest metoda, która jest godna uwagi, jest to typ (return). – rism
Zbyt wiele wyjaśnień na proste pytanie. MOIM ZDANIEM. – Mahmoodvcs