J'ai une demande. Cette application utilise une interface pour accéder à la base de données. Cette interface peut être implémentée par de nombreuses classes. Par exemple, une classe utilise EF 4.4, mais d'autres classes peuvent utiliser EF5 qui est plus efficace. Dans le futur, j'utiliserai peut-être EF6 car il utilise des méthodes asynchrones. Dans cet exemple, toutes les méthodes utilisent EF, mais peut-être d'autres options peuvent être utilisées d'autres façons.
L'application est codée une fois, en utilisant l'interface, et selon le fichier de configuration, utiliser une implémentation ou l'autre, donc je dois seulement modifier le code à un endroit, le constructeur, pour ajouter la nouvelle option dans l'instanciation de la classe qui est assignée à l'interface.
Pour le moment, toutes les méthodes des classes ne sont pas async
mais à l'avenir, si j'utilise EF6, j'aimerais utiliser les méthodes asynchrones. Je ne sais donc pas s'il est possible que la classe qui utilise EF6 et qui implémente l'interface puisse utiliser la méthode asynchrone. async
méthodes.
Pour les méthodes asynchrones de EF6, j'utiliserais le modèle async/awiat, donc dans la méthode de ma classe je dois utiliser l'attribut async. Cela me permet d'utiliser la méthode await
lorsque j'appelle la méthode asynchrone de EF6.
Mais cette classe peut implémenter l'interface qui, dans un premier temps, est destinée aux méthodes synchrones ?
Existe-t-il un moyen d'utiliser plusieurs implémentations dans l'application principale sans devoir modifier le code ? Certaines implémentations utiliseront des méthodes asynchrones tandis que d'autres seront synchrones.
3 votes
Gardez à l'esprit que
async
ne fait pas partie de la signature ; une méthode asynchrone et une méthode non asynchrone peuvent toutes deux implémenter la même méthode d'interface.1 votes
Ce n'est pas la méthode qui est attendable, c'est le type (de retour).
2 votes
Trop d'explications pour une simple question. IMHO.