2016-03-29 1 views
1

J'ai beaucoup d'entités avec 3 colonnes de langue: DescriptionNL, DescriptionFR et DescriptionDE (Description, Info, Article, ... tout en 3 langues).Comment récupérer un modèle de domaine multilingue?

Mon idée était de créer une quatrième propriété Description qui renvoie la bonne valeur selon le Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.

Mais un inconvénient est que lorsque vous avez une méthode GetAll() dans votre référentiel pour une liste déroulante ou autre chose, vous renvoyez les 3 valeurs à la couche d'application. Donc, le trafic réseau supplémentaire. L'ajout d'un langage de paramètres aux services de domaine pour récupérer les données est également "non fait" selon les experts de DDD. La raison en est que la langue fait partie de l'interface utilisateur, pas du domaine. Alors quelle est la meilleure méthode pour récupérer vos modèles avec la bonne description?

Répondre

2

Vous avez raison de dire qu'un langage n'a aucune incidence sur un modèle de domaine. Si vous devez manipuler des objets ou des données, vous devrez utiliser une forme canonique de ces données. Cela s'applique uniquement à la situation où la valeur a une signification quelconque dans votre domaine. Tout ce qui n'est là que pour la classification peut ne pas intéresser votre modèle mais il peut être utile d'utiliser encore une valeur canonique.

L'avantage supplémentaire d'une valeur canonique est que vous savez ce que la valeur représente même à travers les systèmes, car vous pouvez faire un mappage.

Une approche canonique utilisée sur un de mes projets précédents avait des ensembles de données avec des descriptions dans plusieurs langues, mais les clés étaient les mêmes pour chaque valeur. Par exemple, Mr est la clé 1, tandis que Mrs est la clé 2. Maintenant en français M. serait la clé 1 et Mme serait la clé 2. Ces valeurs sont vos valeurs organisationnelles. Supposons maintenant que vous avez le Système A et le Système B. Dans le Système A Mr est la valeur 67 et dans le Système B Mr est la valeur 22. Maintenant, vous pouvez mapper à ces valeurs via vos valeurs canoniques.

Vous ne stockez pas nécessairement ces entités dans un référentiel, mais elles doivent être dans un modèle de lecture pouvant être facilement interrogé. Le voyage à la base de données ne devrait pas être trop gros d'une affaire que vous pourriez mettre en cache les résultats avec un numéro de version ou une date d'expiration.

+0

Supprimez les colonnes NL, DE, FR, EN, ... de la base de données et utilisez plutôt un code unique. Créez une table de code avec la version linguistique différente pour ce code. Et laissez la couche Application choisir la version de langue pour le code correspondant? – Filip

+0

C'est exact. Ce que nous avons fait était de demander un jeu de données par nom et version. Cette URL serait mise en cache par le navigateur, donc les performances étaient bonnes. Ce ne sont pas censés être des fichiers énormes de toute façon. Les métadonnées pour chaque ensemble de données ont été stockées localement car vous devez savoir quelle version vous recherchez. Les métadonnées ne seraient jamais mises en cache. –