Nous avons décidé de créer des applications distinctes pour l'authentification de l'utilisateur et la gestion des utilisateurs. La raison en est que le premier est un "ceci juste besoin de toujours travailler et de le faire instantanément" le service de style, etc. inclut un composant d'interface utilisateur beaucoup plus important avec de nombreuses exigences et fonctionnalités.
Malheureusement, tandis que l'embarquement blanc, le prototypage et l'obtention d'informations supplémentaires sur les fonctionnalités requises, nous avons découvert qu'ils doivent partager plusieurs types d'informations. Par exemple, les deux applications doivent savoir si un utilisateur est verrouillé ou doit réinitialiser leur mot de passe.
Nous envisageons de connecter les applications à la même base de données. Nous avons envisagé d'utiliser des services Web pour la communication, mais qui a un coût supérieur plus haut, est plus complexe et aura pire des performances (en supposant que la même requête soit faite dans les deux cas). Nous devrions conserver des informations de synchronisation dans deux instances de base de données, ce qui n'est évidemment pas une configuration optimale.
D'autre part, le partage de l'instance de base de données nécessiterait des schémas d'entité de l'ORM pour rester synchronisé quelque peu (même si nous n'utilisions pas un, nous aurions toujours besoin de vous assurer que nos requêtes travaillaient toujours dans les deux applications chaque fois que le schéma de base de données a changé. ). Cela crée une dépendance partagée. De plus, la base de données devient un seul point d'échec/performance médiocre. De plus, je ne suis pas sûr qu'il serait possible de cacher des données non pertinentes à partir de l'une ou l'autre de l'application. L'encapsulation est donc réduite.
Quelqu'un a-t-il déjà travaillé ce dilemme avant et a gagné des idées? Je suis sûr qu'il y a d'autres considérations ici que je n'ai pas encore pensé. Il n'est pas exactement inhabituel d'avoir différentes applications se connecter à une base de données centrale.
Éditer (beaucoup plus tard):
Le résultat de cette histoire est presque deux ans plus tard, c'est que nous avons fini de fusionner les applications en une (qui était heureusement facile, car ils étaient tous les deux des modules seulement en utilisant le même cadre). Le raisonnement de les diviser en deux sens au moment, mais rétrospectivement, ils ont partagé trop de responsabilités pour la rendre pratique.
Quelque chose à considérer pourrait être une approche de gestion de données principales (MDM). Il s'agirait essentiellement d'un magasin de données opérationnelles pour chaque application, chacun à l'aide d'un travail ETL ou de réplication pour se synchroniser avec un magasin de données de base.
Chaque schéma de magasin de données opérationnel peut évoluer de manière indépendante, avec le travail ETL qui manipule toutes les traductions nécessaires. La fréquence à laquelle vous synchronisez et dans quelle direction (s) direction (s) dépendrait de vos besoins.
Ce modèle est souvent utilisé dans les scénarios d'entreposage de données, mais il peut également fonctionner pour des données transactionnelles. Vous mettriez vos applications ou vos services Web devant les magasins de données opérationnelles, et peut-être que les services de rapport ou d'autres services en aval peuvent consommer à partir du magasin de données principales si vous le souhaitez.
Il existe plusieurs solutions MDM commerciales disponibles, qui peuvent fournir:
Cependant, ce modèle peut également être mis en œuvre sans solution commerciale MDM ni outil. Les bases de données seraient désignées comme opérationnelles et maîtres et les travaux de réplication nécessaires pour déplacer les données entre eux devraient être construits.
Quelle que soit la mise en œuvre spécifique, ce modèle peut aider à découpler les deux schémas opérationnels les uns des autres.