我在这里发布了一个关于多语言数据库设计的问题,
[]多语言数据库设计的最佳实践是什么?
我喜欢 Martin 的建议,但现在我有一个问题,创建业务对象的最佳方式是什么?如果我将创建包含 ProductTranslation 对象的产品,那么 UI 中的绑定和工作将会很复杂,如果只有本地化的对象,我将不得不为 CMS 创建不同的对象
非常感谢!
问问题
464 次
1 回答
2
很难回答,因为这取决于您的确切需求。我们在一个地方拥有的是这个(基于另一个问题中描述的数据库模型):
- 业务对象是在数据库之后建模的,这意味着我们有一个 Product 类,它有一个 ProductTranslation 对象的集合
- 在产品类中,我们有多语言数据的属性,例如描述
- 这些属性的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 表建模为一个业务对象(产品),然后为特定语言加载(例如,如果数据是只读的并且不需要在应用程序范围内缓存它)。
于 2009-05-30T14:32:17.793 回答