私はドメイン駆動設計を使用しており、ドメインモデルをかなり明確に把握しています。120以上のクラスが含まれており、非常に安定しています。.NET 4とC#で実装します。重要なのは、モデルが多言語である必要があるということです。一部の属性は、複数の言語で保存する必要があります。たとえば、Personクラスには、string
英語(「Librarian」など)とスペイン語(「Bibliotecario」など)の値を格納するタイプのPositionプロパティがあります。このプロパティのゲッターは、言語パラメーターに応じて英語またはスペイン語のバージョンを返す必要があります。
そして、ここから私の質問を始めます。これをパラメータ化する方法がわかりません。私はそれを行うための2つの主要な方法を説明しました:
- プロパティコレクションを使用します。位置はでは
string
なく、Dictionary<Language, string>
クライアントが言語によって人の位置を取得できるようにするためのものです。 - 単純なスカラープロパティを保持しますが、グローバルに知られている「現在の言語」設定に応じて、ある言語または別の言語の値を返す(または設定する)ようにします。クライアントコードが作業言語を設定し、次にすべてのオブジェクトがその言語で値を設定および取得します。
オプション1はグローバル状態を回避しますが、モデル内のほぼすべてのクラスのインターフェースを台無しにします。一方、オプション2は、グローバル設定を見ないと、どの言語を使用するかわからないため、表現力が低下します。また、グローバル設定のすべてのクラスに依存関係を導入します。
私はデータベースやORMの実装には興味がないことに注意してください。私はドメインモデルレベルでのみ作業しています。
次に、2つの具体的な質問があります。
- 多言語ドメインモデルの目標を達成するための最良のオプション(1または2)はどれですか?
- 私が考慮していない他のオプションはありますか、そしてそれらはどれですか?
ありがとうございました。
編集します。これはユーザーインターフェイス関連の問題であり、.NETのグローバリゼーション/ローカリゼーションサポートを通じて対処できるとの意見もあります。同意しません。UIローカリゼーションは、コンパイル時にユーザーに表示する必要があるローカライズされたリテラルを知っている場合にのみ機能しますが、これは私たちの場合ではありません。私の質問は、実行時にユーザーデータとして提供されるため、コンパイル時に不明な多言語データに関するものです。これはUI関連の問題ではありません。
編集2。Person.Positionは、質問を説明するための単なるおもちゃの例であることに注意してください。実際のモデルの一部ではありません。それを批判したり、改善したりしようとしないでください。それをする意味はありません。私たちのビジネス要件には、列挙型などとしてエンコードできない多くの属性が含まれ、フリーテキストのままにする必要があります。したがって、難しさ。