3

我正在尝试创建一个支持本地化的域模型。我查看了一些之前提出的 SO 问题,但我不太喜欢提出的解决方案。例如,在这个问题中,我认为为每个应该支持本地化数据的实体创建一个额外的实体是一种矫枉过正的做法。我宁愿将我所有实体的本地化数据放在一个实体中,该实体的唯一目的是保存本地化数据。

我提出的解决方案如下:

  1. 创建一个LocalizedEntity类,所有应该支持本地化的实体都将从该类继承。

  2. 创建一个LocalizedData实体,该实体基本上将按文化保存实际的本地化值。

更新:

public class LocalizedEntity
{
    public String Code { get; set; }
}

public enum ResourceType
{
    CityName,
    CityDescription,
    StreetName,
    AreaName
    //others...
}

public class LocalizedData
{
    public Int32 Id { get; set; }
    public String Code { get; set; }
    public ResourceType Type { get; set; }
    public Int32 CultureId { get; set; }
    public String Value { get; set; }
}

public class City : LocalizedEntity
{
    public Int32 Id { get; set; }
    public virtual ICollection<Area> Areas { get; set; }
    //others
}

因此,业务层将获取本地化实体,然后通过and去从LocalizedData实体中获取其本地化值。当然,为了避免多次往返数据库,一些缓存可能是合适的。CodeResourceType

你的意见?

4

1 回答 1

4

您正在建模的是 EAV(实体属性值)存储。很快您的“资源类型”枚举将溢出到无法管理的状态。雪上加霜,这在数据库结构方面是非常无效的。

如果您想要在代码可读性的数据库使用方面仍然可维护的本地化,您应该本地化实体,而不是属性,这意味着数据库中的每一行都应该包含该实体的实体 ID、语言 ID 和该语言的数据。

于 2012-09-15T11:24:12.323 回答