2009-05-30 13 views
1

ここで多言語データベース設計に関する質問を投稿しました
[] What are best practices for multi-language database design?
私はMartinの提案が好きですが、ビジネスオブジェクトを作成するにはどうすればよいでしょうか? ProductTranslationオブジェクトを含む製品を作成する場合、UIのバインディングと作業は複雑になります。ローカライズされたオブジェクトのみであれば、CMS用に別のオブジェクトを作成する必要があります
ありがとうございます!多言語データベース設計のビジネスクラス

+0

この回答ありがとうございます!私はこの質問があまり注目されていないとは信じられません。あなたは、このトピックに関するあなたの結論(例えば、あなたが使用するアプローチ、賛否両論など)をコメントや回答に書いてください。それは評価されます。 –

+0

@krocan私は2年前にこれが必要なので、賛否両論を正確に覚えていないが、私はこの質問に完全に当てはまると思う。 –

答えて

2

これは、あなたの正確なニーズによって異なるため、答えが難しいです。私たちは一つの場所に持っていることである。この(他の質問で説明したDBモデルに基づく):

  • ビジネス・オブジェクトは、我々がProductTranslationのコレクションは
  • オブジェクト持つクラスの製品を持っている意味、データベースの後にモデル化されていますProductクラスの
  • には、多言語データのプロパティがあります。説明
  • これらのプロパティのゲッター(現在の言語に基づいて)正しい翻訳オブジェクトを検索し、対応する値を返す

非常に簡単な例(関連部分のみを示す):

class ProductTranslation 
{ 
    public string Description; 
} 
public class Product 
{ 
    private List<ProductTranslation> _translations; 

    private ProductTranslation GetTranslation(string language) 
    { 
     // return translation for specified language 
     // or return translation for default language   
    } 

    public string Description 
    { 
     get 
     { 
      return GetTranslation(GetCurrentLanguage()).Description; 
     } 
    }  
} 

このアプローチをASP.NET Webアプリケーションに選択しました。 CurrentLanguageはユーザーごとに異なる場合があります(ユーザーはUIとデータの優先言語を選択できます)。このアプローチにより、すべてのユーザーにデータをグローバルにキャッシュすることができます。

必要に応じて、この方法が最適ではない場合があります。例えば。 ProductとProductTranslationの表を1つのビジネス・オブジェクト(Product)としてモデル化し、特定の言語用にロードしてください(たとえば、データが読み取り専用で、アプリケーション全体でキャッシュする必要がない場合)。

+0

マーティン、役に立つポスト –