LuccaSA / RestDrivenDomain

8 stars 1 forks source link

Supression totale des fields #214

Closed rducom closed 5 years ago

rducom commented 5 years ago

A été évoqué l'idée de permettre la suppression totale des fields, à la condition obligatoire de permettre de "couper" la sérialisation une fois arrivé sur un objet Entity lors du parcours de graphe du type, et à remplacer cet objet par son URL uniquement.

Cette approche colle parfaitement à l'approche Fluent (https://github.com/LuccaSA/RestDrivenDomain/issues/193) : on pourrait réutiliser le cache des entités lors de la sérialisation pour effectuer le check permettant de substituer un objet par son URL.

Actuellement les fields sont aussi utilisés côté backend pour piloter les Includes EF, dans une logique "d'optimisation". C'est à ma connaissance le seul aspect qui serait impacté, mais je pense qu'il doit en exister d'autres.

Quels sont vos avis à ce sujet ?

nfaugout-lucca commented 5 years ago

J'ai pas compris ta première phrase, tu peux préciser stp ?

En effet les Fields sont historiquement utilisés dans la sérialisation et dans l'infra pour savoir quelles tables inclure.

Mais si on embrasse une approche strictement REST, ça équivaudrait à dire :

D'où la situation actuelle, où les fields sont autorisés sur les collections, et ou les includes sont déconseillés mais possibles.

rducom commented 5 years ago

on pourrait réutiliser le cache des entités lors de la sérialisation pour effectuer le check permettant de substituer un objet par son URL.

Lors de l'étape de sérialisation, le cache des entités permettrait très facilement (via un .ContainsKey(typeof(T)) sur le type entité) de savoir si une entité est oui ou non un BO/BR, et si c'est le cas, substituer l'objet par son URL.

Le problème que tu soulève me rappelle aussi un point remonté hier sur les "sous-collections", actuellement problématique : si un BO a une propriété contenant une liste de 10 000 objets, et que ceux-ci ne sont pas des des BO, alors on les remonte tous. Actuellement les fields permet de "limiter les dégats", mais le pb existera toujours tant que le dev ne transformera pas cette "sous-entité" en un BO avec sa propre API. Peut-être que la solution est à ce niveau d'ailleurs : c'est de la responsabilité des devs de structurer correctement leur domain.

nfaugout-lucca commented 5 years ago

c'est de la responsabilité des devs de structurer correctement leur domain.

Voilà pour moi c'est ça la solution. Faire en sorte de ne pas se retrouver dans une situation délicate (trop de fields sur une entité, trop de sous objets), de sorte qu'on n'ait pas besoin des fields.

Mais on les laisse parce qu'on sait bien que assez souvent ça dépanne bien.

Poltuu commented 5 years ago

à mon humble avis, virer les fields, c de la science fiction. C'est largement la feature la plus utilisée dans le monolithe et dans rdd. Si tu vires les fields, que va-t-il se passer ? Les objets ne vont pas changer de taille, car la taille des objets n'est pas lié à la feature, les includes ne seront plus pilotés par le front, mais toujours joués. Les fronteux ne vont pas changer leurs habitudes, car ils devraient dès aujourd'hui embrasser le http2 et faire plus de petites requêtes, mais ce n'est comme ça qu'ils aiment faire.

Ce qu'on essaye de vendre là en fait c'est quoi ? c'est genre faite n apis qui correspondent quasi 1 pour 1 avec les n tables en base, et puis faites n appels sur ces apis, chargez les données dans le client, indexés par id, et roulez jeunesse, le front est prêt. Coté back, c sur, c plus simple (encore que pour les droits, on se rends vite compte que ça ne marche pas souvent comme ça). Pour le front, ça implique de modifier tous leurs réflexes, et les boucliers vont se lever.

GMouron commented 5 years ago

:+1, et pas que chez les fronteux 😛