【发布时间】:2013-04-04 23:21:43
【问题描述】:
在遵循 DDD 概念时,我正在努力决定是否应该了解我的域本地化?我提供了两种解决方案来解决这个问题。两者都使域本地化在不同的地方有意识。我什至应该将本地化文本放置到域中吗?分享您对此问题的解决方案或我的两个示例的优缺点。谢谢。
示例 1
class Persion {
String name;
// other fields ommited
void rename(String newName) {
String oldName = this.name;
this.name = newName
// publish event with old name and new name
}
String name() {
return name;
}
}
class PersionRepository {
void store(Persion persion) {
Locale loc = LocaleContextHolder.get().getLocale();
// store object to DAO - create/update fields for context locale
}
// other methods ommited
}
示例 2
class Persion {
Map<Locale, String> name;
// other fields ommited
void rename(String newName) {
Locale locale = LocaleContextHolder.get().getLocale();
String oldName = this.name.put(locale, newName);
// publish event with old name and new name
}
String name() {
Locale locale = LocaleContextHolder.get().getLocale();
return this.name.get(locale);
}
}
class PersionRepository {
void store(Persion persion) {
// store object to DAO - create/update fields for all locales
}
// other methods ommited
}
【问题讨论】:
-
重言式,这取决于您是否决定您的对象的域包括本地化。不过,我可能会选择将这种担忧与其他“业务”逻辑分开。
-
什么时候需要本地化文本?如果只是在 UI 层,那就在那里做本地化。
-
你们都对 99% 我需要本地化文本,仅用于域逻辑之外的 UI。所以你的意思是从域对象中完全删除本地化文本?
-
是的。如果本地化本身不是领域的一部分,它似乎是表示层的问题,所以在那里处理它。
-
感谢您的回复。这里的每个人都建议这样做,但你是第一个。您能否将您的 cmets 总结为答案(也许有一些小例子),以便我给您一个信用。
标签: java design-patterns localization domain-driven-design