2016-03-29 20 views
1

Ich habe viele Entitäten mit 3 Sprachspalten: DescriptionNL, DescriptionFR und DescriptionDE (Beschreibung, Info, Artikel, ... alle in 3 Sprachen).So rufen Sie das mehrsprachige Domänenmodell ab?

Meine Idee war, eine vierte Eigenschaft Description zu erstellen, die den richtigen Wert gemäß der Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName zurückgeben.

Aber ein Nachteil ist, dass wenn Sie eine GetAll() Methode in Ihrem Repository für eine Dropdown-Liste oder etwas anderes haben, Sie die 3 Werte an die Anwendungsschicht zurückgeben. Also extra Netzwerkverkehr.

Das Hinzufügen einer Parametersprache zu den Domänendiensten zum Abrufen von Daten ist laut DDD-Experten ebenfalls "nicht erledigt". Der Grund ist, dass die Sprache Teil der Benutzeroberfläche ist und nicht die Domäne. Also, was ist die beste Methode, um Ihre Modelle mit der richtigen Beschreibung zu erhalten?

Antwort

2

Sie haben Recht damit, dass eine Sprache keine Auswirkungen auf ein Domänenmodell hat. Wenn Sie Objekte oder Daten manipulieren müssen, müssen Sie eine kanonische Form dieser Daten verwenden. Dies gilt nur für Situationen, in denen der Wert in Ihrer Domain irgendeine Bedeutung hat. Alles, was nur für die Klassifizierung zur Verfügung steht, mag Ihr Modell nicht interessieren, aber es kann nützlich sein, einen kanonischen Wert zu verwenden.

Der zusätzliche Vorteil eines kanonischen Werts besteht darin, dass Sie wissen, was der Wert sogar systemübergreifend darstellt, da Sie ein Mapping durchführen können.

Ein kanonischer Ansatz, der bei einem meiner früheren Projekte verwendet wurde, hatte Datensätze mit Beschreibungen in verschiedenen Sprachen, die Schlüssel waren jedoch für jeden Wert gleich. Zum Beispiel ist Mr Schlüssel 1, während Mrs Schlüssel 2 ist. Jetzt in Französisch M. wäre Schlüssel 1 und Mme wäre Schlüssel 2. Diese Werte sind Ihre organisatorischen Werte. Nehmen wir an, Sie haben System A und System B. In System A Mr ist Wert 67 und in System B Mr ist Wert 22. Jetzt können Sie diese Werte über Ihre kanonischen Werte zuordnen.

Sie würden diese nicht unbedingt als Entitäten in einem Repository speichern, aber sie sollten in einem Lesemodell sein, das leicht abgefragt werden kann. Die Reise zur Datenbank sollte nicht zu groß sein, da Sie die Ergebnisse mit einer Versionsnummer oder einem Ablaufdatum zwischenspeichern können.

+0

Löschen Sie die Spalten NL, DE, FR, EN, ... in der Datenbank und verwenden Sie stattdessen einen eindeutigen Code. Erstellen Sie eine Codetabelle mit der anderen Sprachversion für diesen Code. Und lassen Sie die Anwendungsschicht die Sprachversion für den entsprechenden Code wählen? – Filip

+0

Das ist richtig. Wir haben einen Datensatz nach Name und Version angefordert. Diese URL wurde vom Browser zwischengespeichert, so dass die Leistung in Ordnung war. Dies sind sowieso keine riesigen Dateien. Die Metadaten für jedes Dataset wurden lokal gespeichert, da Sie wissen müssen, welche Version Sie verwenden möchten. Metadaten würden niemals zwischengespeichert. –

Verwandte Themen