2016-03-29 22 views
1

DescriptionNL、DescriptionFR、DescriptionDE(Description、Info、Article ... 3言語のすべて)という3つの言語列を持つエンティティが多数あります。多言語ドメインモデルの取得方法

私の考えはという第4のプロパティを作成して、Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageNameに従って正しい値を返すことでした。

ただし、ドロップダウンリストなどのためにGetAll()メソッドがリポジトリにある場合、3つの値をアプリケーションレイヤーに戻すという欠点があります。余分なネットワークトラフィック。

DDDの専門家によれば、データを取得するためにドメインサービスにパラメータ言語を追加することも「実行されません」。その理由は、言語がドメインではなくUIの一部であるためです。正しい記述でモデルを検索する最善の方法は何ですか?

答えて

2

言語がドメインモデルと関係していないことは間違いありません。オブジェクトやデータを操作する必要がある場合は、そのデータの正式な形式を使用する必要があります。これは、その値があなたのドメインで何らかの意味を持つ状況にのみ適用されます。分類のためにしか存在しないものは、あなたのモデルには関心がないかもしれませんが、正規の値を使用することは有用かもしれません。

標準的な値の利点は、マッピングを実行できるようにシステム全体でも値が何を表しているかを知ることです。

以前のプロジェクトの1つで使用されていた標準的なアプローチでは、さまざまな言語の説明付きのデータセットがありましたが、キーは各値ごとに同じでした。たとえば、Mrはキー1ですが、Mrsはキー2です。現在はフランス語でM.はキー1、Mmeはキー2となります。これらの値は組織の値です。ここでシステムAとシステムBがあるとしましょう。システムAでMrは値67で、システムBではMrは値22です。標準値を介してこれらの値にマップできます。

これらは必ずしもエンティティとしてリポジトリに保存する必要はありませんが、読みやすいモデルであり、簡単にクエリできます。バージョン番号または有効期限とともに結果をキャッシュすることができるので、データベースへの旅行はあまりにも大きなものであってはなりません。

+0

NL、DE、FR、EN、...列をデータベースにドロップし、代わりに一意のコードを使用します。このコードの言語バージョンが異なるコードテーブルを作成します。また、アプリケーションレイヤに対応するコードの言語バージョンを選択させますか? – Filip

+0

それは正しいです。私たちがしたことは、名前とバージョンでデータセットをリクエストすることでした。そのURLはブラウザによってキャッシュされるため、パフォーマンスは良好でした。彼らはとにかく巨大なファイルではないと考えられています。後でどのバージョンを使用するかを知る必要があるため、各データセットのメタデータはローカルに保存されていました。メタデータはキャッシュされません。 –