多语言数据库设计的业务类

时间:2009-05-30 13:50:51

标签: business-objects business-logic business-logic-layer

我在这里发布了一个关于多语言数据库设计的问题,左[] What are best practices for multi-language database design?我喜欢Martin的建议,但现在我有一个问题是什么是创建业务对象的最佳方法?如果我将创建包含ProductTranslation对象的产品,则在UI中绑定和工作将是复杂的,如果只有本地化对象,我将不得不为CMS创建不同的对象。非常感谢!

1 个答案:

答案 0 :(得分:2)

很难回答,因为这取决于您的确切需求。我们在一个地方拥有的是这个(基于另一个问题中描述的数据库模型):

  • 业务对象是在数据库之后建模的,这意味着我们有一个具有ProductTranslation对象集合的Product类
  • 在Product类中,我们有多语言数据的属性,例如:描述
  • 这些属性的getter查找正确的翻译对象(基于当前语言)并返回相应的值

一个非常简单的例子(仅显示相关部分):

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表建模为一个业务对象(Product)然后为特定语言加载(例如,如果数据是只读的并且不需要在应用程序范围内缓存它)可能会更好。