Bonjour à tous,

j'ai eu une discussion très intéressante avec plusieurs collègues et j'aimerai l'avis de la communauté sur le sujet. La discussion mélange la couche service et la couche de persistence.
Bonjour à tous,

c'est mon premier message à cette illustre assemblé et j'aimerai avoir votre avis sur une discussion très intéressante que j'ai eu avec des collègues. La discussion mélange la couche service et la couche de persistence.

Nous avons une base de données (jusque là tout va bien) dont les tables ont pour certaines des clés naturelles (business/natural key) et d'autres des clé générées (surrogate key). La plupart des tables avec des clés naturelles sont des tables repris d'un système COBOL et certaines des ces tables sont avec des clés naturelles composées.

Maintenant voilà ma question:

Comment exposeriez vous les entités (ou plutôt les DTO) liées à ces tables qui ont des clés métier composées au niveau de la couche de service? Par exemple, dans un environnement SOA : un service A qui appel un service B avec comme paramètre l'objet XX qui a une clé métier composée. Le service B voulant référencer l'objet A dans son propre domaine. Il se trouve que A et B partage la même DB mais ce ne sera peut-être pas le cas dans le futur.
1) Avec une clé métier composée
2) Avec une surrogate keys
3) Avec une clé non-composée basée sur la clé naturelle. Par exemple par concaténation de la clé naturelle.
4) Toutes autres idées

Voici les différents problèmes que je vois à ces solutions:
1) Le service B doit persister la clé métier composée de XX afin d'en faire référence. D'une part des clés étrangères composées c'est pas pratiques et d'autres part que se passe t-il si la clé étrangère change. De plus, le service B ne peut pas traiter toutes les clés venant d'autres services de la même façon puisqu'il doit interpréter les détails des champs.
2) Il ne faut jamais exposer une surrogate key parce que sinon tôt ou tard elle devient naturelle et qu'après c'est le drame si il faut régénérer les clés.
3) Cette solution me dérange également parce que : soit il faut sérialiser/désérialiser la clés soit il faut persister cette clé artificielle dans le domaine de A et que l'on casse la forme normale. En effet, les information seront à la fois dans le champs dédié de la DB et dans la clé

Pour résumer quels type d'identifiants utilisez vous dans la couche service?


Je serai très intéressé de vos retours. D'avance merci pour la discussion.

PS : Je ne pense pas être sur le bon forum mais je n'en ai pas trouvé de plus adapté. Désolé d'avance si un déménagement s'avère nécessaire.