如何正确设计应包含双语信息的类

| 如果我的域对象应包含2种语言的字符串属性,我应该创建2个单独的属性还是创建新的BiLingualString类型? 例如,在植物分类应用程序中,植物域对象可以包含Plant.LatName和Plant.EngName。 整个域的双语属性数量并不大,大约为6-8,我只需要支持两种语言,信息应该同时以两种语言呈现给UI。 (因此这不是本地化)。需求在开发过程中不会改变。 它看起来像是一个简单的问题,但是这个决定将对验证,持久性,对象克隆和许多其他事情产生影响。 我可以想到使用新的dualString类型的缺点: 验证:如果我要使用DataAnattations,Enterprise Library验证块,Flued验证,这将需要更多的工作,对象图验证比简单的属性验证更难。 持久性:NH或EF醚将需要更多具有复杂特性的工作。 OOP:更复杂的对象初始化,在使用它之前,我将必须在构造函数中初始化此新Type。 体系结构:转换对象以在层之间传递对象比较困难,自动映射工具将需要更多的手工工作。     
已邀请:
        如果您100%确保它始终都是拉丁语和英语,那么我会坚持使用最简单的解决方案-2个字符串属性。与使用BiLingualString相比,它在UI中也更加灵活。持久化时,您不必处理复杂类型。     
        在阅读您的问题时,我一直都在思考
why not localization
,但是当我阅读
information should be presented to UI in both languages at the same time.
时,我认为使用属性是有意义的。 在这种情况下,我会去上一堂课,每种语言都有一个字符串,就像您提到的
BiLingualString
public class Names
{
    public string EngName {get;set;}
    public string LatName {get;set;}
}
然后我会像这样在我的主要Plant类中使用该类
public class Plant: Names
{

}
    
        为了帮助做出决定,我建议考虑此行为在所有层次上的一致性。如果将它们作为业务对象上的两个单独的属性公开,那么我也希望看到它作为两个单独的列存储在数据库记录中,例如,而不是针对存储在单独表中的同一属性的两个转换。以这种方式存储翻译似乎很奇怪,但是您的理由听起来很合理,并且6个属性并非不可管理。但是请确保您将来不打算添加更多语言。 如果您希望该系统具有一定的动态性,因为您可能需要在某个时候添加另一种语言,那么对我来说,以不同的方式实现它似乎更有意义,这样您就不必在使用新的语言时更改架构了。语言需要得到支持。 我想要权衡的是:考虑将语言或属性调整为适应新语言的可能性,以防您通过将它们直接显示为单独的属性而不是将翻译加载为单独的级别而获得的优势(简单) 。     

要回复问题请先登录注册