MTES-MCT / dialog

Intégration de la réglementation de circulation dans les solutions numériques
https://dialog.beta.gouv.fr
GNU Affero General Public License v3.0
9 stars 1 forks source link

Refacto de la table Location #738

Closed mmarchois closed 7 months ago

mmarchois commented 7 months ago

Description du problème

La table Location stock de plus en plus d'informations au fur et à mesure que le projet avance. Nous avons pour le moment deux types de localisations :

Solution proposée

L'objectif de cette PR est de séparer la table Location, qui continuera de stocker l'information sur la géométrie. Les informations propres au type de localisation seront stockés dans deux autres tables Road et Lane qui hériteront de Location.

Contexte supplémentaire

https://github.com/MTES-MCT/dialog/pull/693#issuecomment-2037319735

florimondmanca commented 7 months ago

@mmarchois Je pense qu'il faudrait se départir du terme Lane. C'est un traduction calque qui n'est pas correcte car en anglais "lane" signifie "voie" au sens de "voie de circulation" comme dans "une 4-voies". Donc ça va nous poser problème si/quand on s'attaquera à #424.

Je pense aussi qu'on devrait avoir des noms + spécifiques

qui hériteront de Location.

Je ne pense pas qu'il faille hériter ? Il ne vaut pas mieux composer ? Une localisation pourrait avoir soit une NamedStreet soit un NumberedRoad (et imposer un check de type XOR sur les clés étrangères en base pour le garantir)

Location 0,1----1,1 NamedStreet 
    0,1
     |
     +---1,1 NumberedRoad

Donc je proposerais par exemple :

mmarchois commented 7 months ago

Je ne pense pas qu'il faille hériter ? Il ne vaut pas mieux composer ? Une localisation pourrait avoir soit une NamedStreet soit un NumberedRoad (et imposer un check de type XOR sur les clés étrangères en base pour le garantir)

Exact, c'est le concept auquel je pensais que j'ai mal nommé du coup. Je pensais bien à faire de la composition.

Je suis OK pour renommer Lane et Road en NamedStreet & NumberedRoad, mais concernant la géométrie calculée, je pense qu'elle aurait toute sa place dans la table Location. À la limite, pour le cas de NumberedRoad, on pourra y laisser la géométrie complète (fullGeometry).

florimondmanca commented 7 months ago

concernant la géométrie calculée, je pense qu'elle aurait toute sa place dans la table Location. À la limite, pour le cas de NumberedRoad, on pourra y laisser la géométrie complète (fullGeometry).

Oui :+1:

johanricher commented 7 months ago

Je me demande si traduire ces termes en Anglais a un sens, cf. l'échange informel qu'on avait eu avec Florimond sur Mattermost à propos de ce thread Twitter.

florimondmanca commented 7 months ago

Oui, perso je ne serais toujours pas choqué d'utiliser les termes métier en français pour les noms de ces entités

mmarchois commented 7 months ago

Je suis assez allergique au mélange anglais - français :smile: (avis très perso) et je préfèrerai conserver la notion de NamedStreet / NumberedRoad. Cette politique (du tout anglais) est utilisée partout ailleurs, ce serait donc bizarre d'avoir une seule partie en "franglais".

Si vous tenez absolument à utiliser les termes métiers (et donc en français), il faudra repasser sur l'ensemble du code applicatif.

florimondmanca commented 7 months ago

Oui jusqu'ici on utilise du tout-anglais mais on ne s'est jamais vraiment posé pour en décider clairement je trouve (par ex, pas d'ADR sur le sujet). La position "traduisons tout en anglais" l'a emporté par défaut jusqu'ici mais Léa et moi avions déjà argumenté sur pourquoi c'était problématique.

En bref ça ne respecte pas le principe de langage ubiquitaire et ça a des inconvénients concrets dans la pratique : il faut trouver des traductions fidèles, que chaque personne dans l'équipe dev comprenne ces traductions, ce qui n'est pas garanti, etc.

On le voit avec le terme road qu'on utilise pour toute sorte de cas dans le BdTopoRoadGeocoder, on ne sait plus si on écrit road au sens "route numérotée" ou juste comme un terme générique désignant un linéaire de voie...

Autre article : Ubiquitous Language in a non-English domain, cas allemand, je suis d'accord avec tout ce que j'y lis

À commencer par :

Our choice of language aims to minimize cognitive load (e.g. translations).

Ça me semble être une bonne stratégie. Si telle approche crée moins de charge mentale que telle autre, ne vaut-il pas mieux la préférer ?

Quand je dis "utiliser les termes métier" je ne dirai pas écrire du code franglais, mais juste ces termes là, et donc je serais aussi d'accord avec ces points :

Le billet va encore plus loin par exemple sur les commentaires, j'aurais cependant très envie de les écrire en français. Pour la pérennité du projet c'est mieux. On ne peut pas supposer une maîtrise de la langue anglaise dans un contexte très technique de la part des devs qui interviendront dans le futur sur DiaLog...

Concernant l'existant :

il faudra repasser sur l'ensemble du code applicatif.

Non je pense qu'on n'est pas obligés.

À terme ça serait bien, mais si on décide de changer d'approche, les termes anglais seront à considérer comme de la dette technique et à prioriser comme telle, je pense ? Ça peut être du "filler work" pour les moments de creux.

En contre-arguments je verrais :

johanricher commented 7 months ago

À terme ça serait bien, mais si on décide de changer d'approche, les termes anglais seront à considérer comme de la dette technique et à prioriser comme telle, je pense ? Ça peut être du "filler work" pour les moments de creux.

Je suis d'accord. Il faut prendre une décision (et je considère qu'elle ne l'est pas encore, ça peut toujours se discuter) et le cas échéant il faut associer à cette décision une méthode d'application qui pourrait être celle proposée par Florimond, elle ne se serait engageant que pour le flux, les prochains termes à nommer. Et le traitement du stock serait fait selon une priorisation à définir.

Je pense qu'au-delà des arguments liés au DDD, le fait que les termes utilisés correspondent à ceux dans la BD TOPO (par exemple), sans traduction, rend la compréhension de ces correspondances évidente et sans avoir besoin de lire notre doc (même si ça n'empêche pas qu'il faut que celle-ci soit complète !).

florimondmanca commented 7 months ago

Je pense qu'au-delà des arguments liés au DDD, le fait que les termes utilisés correspondent à ceux dans la BD TOPO (par exemple), sans traduction, rend la compréhension de ces correspondances évidente et sans avoir besoin de lire notre doc (même si ça n'empêche pas qu'il faut que celle-ci soit complète !).

Je clarifierais en disant qu'on ne devrait nommer "comme la BD TOPO" que si on "copie-colle" des objets qui viennent de la BD TOPO.

Mais ça n'est pas ce que DiaLog fait, on "assemble" divers objets BD TOPO dans un nouvel objet DiaLog. Par exemple ce qui s'affiche actuellement dans le formulaire "Route départementale" est l'assemblage d'une section de linéaire, de points de repères, avec côté et abscisse... Toutes ces infos sont dispersées dans la BD TOPO et ne sont pas seulement dans route_numerotee_ou_nommee.

De même notre "Voie nommée" assemble un code Insee venu de l'API Adresse, un nom de voie désormais venu de la BD TOPO, des numéros de maison qu'on localise avec l'API Adresse, etc... Ça n'est pas seulement des données de la table BD TOPO voie_nommee.

Dans la pratique je suis assez convaincu par "Voie nommée" parce que c'est ce qu'on utilise comme appellation au quotidien... Pour "Route numérotée" je ne sais pas encore si c'est un terme qu'on a adopté ? On a juste "Route départementale" pour l'instant...

Ah, autre contre-argument possible

johanricher commented 7 months ago

On décidé en réunion d'équipe hier de ne pas se lancer dans l'application des principes DDD pour l'instant. Faire cohabiter pendant trop longtemps le code où l'on appliquerait ces principes (avec notamment des termes en français) avec le code produit jusqu'à présent risque de poser des confusions, or on ne sait pas estimer l'effort que demanderait de renommer les termes dans tout le stock du code. Si on se lance dans un tel chantier, il faudrait qu'il soit mené avec une durée relativement réduite pour limiter les problèmes liés à cette cohabitation.

Florimond a créé un ticket pour qu'à minima on documente la situation actuelle et ce choix du statu quo : #754