Comme constructeur REST API j'ai fait face à ce problème quelques fois sans une bonne solution:REST conception API pour l'entité cross requêtes
Avoir une organisation de l'entité, il semble clair que nous pouvons être le modèle comme/organisation avec tout le pack (GET, POSt, PUT, DELETE, filtrage, pagination, ...)
NOTEZ que j'utilise Spring avec les classes @RestController et PagingAndSortingRepository injecté dans le contrôleur.
Le problème commence par
/organisation/{id}/utilisateurs
qui est une URL parfaite pour une API REST, mais commence à causer une certaine douleur. Si nous suivons le chemin de traitement de la requête dans le contrôleur d'organisation, nous aurons besoin d'ajouter UserDAO au contrôleur, donc nous pouvons finir avec beaucoup de DAOS injectés dans chaque contrôleur, et chaque contrôleur responsable de renvoyer beaucoup d'objets différents: , utilisateurs, modèles, etc.
La résolution du problème sur la couche DAO n'est pas une solution; Essayer de faire que les dépôts retournent tous ces différents objets ne fonctionnera pas (PagingAndSortingRepository se plaindra si nous essayons de travailler avec des entités différentes) et cela ne semble pas être la bonne chose parce que nous forçons les dépôts à travailler avec des entités hors de son domaine. L'utilisation d'une couche intermédiaire entre les contrôleurs et les DAO pourrait fonctionner, une couche de service capable de contenir ces différents DAO et offrant une seule façade, mais encore une fois se trompe: d'abord le contrôleur fonctionne encore avec de nombreux objets différents domaine, Deuxièmement, nous avons une couche sans but réel qui peut croître avec des combinaisons de DAO, ou ayant un grand objet DAO maître capable d'interroger n'importe quoi.
Quelle est la bonne façon de résoudre ce problème?
mmm ... pas sûr de comprendre parce que vous injectez les deux DAO à la fin ... mais je pense que votre suggestion est peut-être d'avoir des contrôleurs génériques avec des DAO génériques et un mécanisme qui identifiera les DAO requis pour un demande et va instancier à l'exécution un contrôleur spécifique avec des DAO spécifiques pour répondre à cette requête spécifique. C'est ça? – Rafael
@Rafael vous avez mal compris. Tout d'abord, pas de contrôleurs génériques - juste votre contrôleur habituel. Deuxièmement, aucun DAO n'est injecté du tout, ils sont simplement créés en tant que haricots au printemps mais ne sont pas injectés n'importe où. Mais vous avez une usine qui fait référence à eux - chaque bean se met dans la carte d'usine dans son constructeur. Puis dans votre contrôleur à l'exécution, vous pouvez obtenir n'importe quel DAO à travers l'usine –