Internationalization 语言相关DAO(i18n)

Internationalization 语言相关DAO(i18n),internationalization,dao,abap,Internationalization,Dao,Abap,我为数据库表创建了DAO。在SAP ABAP中,您可以拥有包含语言相关文本的其他文本表(语言代码是键的一部分)。 目前,我在程序开始时就创建了DAO实例(依赖项注入),并向它们传递一个语言密钥,该密钥有效地将DAO绑定到特定的语言,让DAO只读取特定语言的文本 然而,在以后的程序中,我被要求从另一种语言获取文本。我该如何应对 在DAO的crud和find by方法中显式地包含语言键?这将要求DAO的任何客户机也公开语言密钥及其方法,并将其正确地传递给DAO,DAO会发出气味。e、 g.方法读取

我为数据库表创建了DAO。在SAP ABAP中,您可以拥有包含语言相关文本的其他文本表(语言代码是键的一部分)。 目前,我在程序开始时就创建了DAO实例(依赖项注入),并向它们传递一个语言密钥,该密钥有效地将DAO绑定到特定的语言,让DAO只读取特定语言的文本

然而,在以后的程序中,我被要求从另一种语言获取文本。我该如何应对

  • 在DAO的crud和find by方法中显式地包含语言键?这将要求DAO的任何客户机也公开语言密钥及其方法,并将其正确地传递给DAO,DAO会发出气味。e、 g.
    方法读取(id,languageCode)返回
    。此外,我希望域对象不知道DAO/基础设施的废话

  • 为DAO本身提供一个语言感知接口,允许我创建另一个绑定到不同语言(工厂)的DAO实例。这需要我显式地访问DAO,否则DAO也是隐藏的。e、 g.
    方法createWithLang(langCode)返回

  • 使域对象具有语言意识,这意味着依赖于语言的方法显式公开语言代码。但是域对象已经需要知道所有语言中的所有文本才能返回正确的文本,或者需要直接访问某个DAO才能重新加载正确的文本。那么,懒惰地这样做是一个额外的挑战(关于ABAPOO)


每一条建议都非常受欢迎

在SAP中,所选语言是会话的一部分。您的程序还可以有一个全局可用的“会话”单例,您可以在其中存储用户语言选择。

我可能会向处理语言相关文本的getter和setter方法添加一个参数,并将其默认值设置为
SY-LANGU
。这样,
l_foo=lr_bar->get_baz_text()
将隐式获取用户登录时使用的语言的文本,而
l_foo=lr_bar->get_baz_text(l_目标语言)
将检索任何其他语言的文本。您可能希望在创建对象时预取当前语言中的文本,并使用哈希表存储与语言相关的文本。

是的,大多数时候我只需要会话语言。但在某些应用程序上下文中,我需要使用另一种语言,这取决于正在处理的业务伙伴。那么,我所有的DAO都绑定到我的会话语言就太晚了。我不想改变那个全局会话实例的语言,那将是在玩globals,从长远来看会杀了你。有什么建议吗?听起来最简单的事情就是创建一个新的会话,专门处理我认为与BP相关的输出。谢谢。如果我的域对象有一个方法get_baz_text(i_lang=sy langu),则域对象将负责加载指定语言的文本。但是,我当前的设计实例化了已经加载了语言相关文本的对象,因此该对象无法用任何其他语言重新加载文本。我更愿意保持域对象和数据访问之间的分离。有什么建议吗?有。不要做得太过分。你不会因为一个漂亮的技术设计而得到任何额外的分数,尽管这可能令人伤心。