我为数据库表创建了DAO。在SAP ABAP中,您可以使用包含语言相关文本的其他文本表(语言代码是密钥的一部分)。 目前我在程序开头(依赖注入)创建DAO实例,并向它们传递一个语言键,它有效地将DAO绑定到特定语言,让DAO只读取特定语言的文本。
但是在程序的后期我需要从另一种语言中获取文本。我该如何应对?
明确地在DAO的crud和find-by方法中包含语言键?这将要求DAO的任何客户端也将语言密钥暴露给它的方法,并将其正确地传递给DAO,这就是气味。例如method read(id, languageCode) returns <thing>
。另外,我希望域对象不知道DAO / infrastructure-crap。
为DAO本身提供一个语言感知界面,允许我创建另一个绑定到不同语言(工厂)的DAO实例。这要求我明确地访问DAO,否则它们会隐藏起来。例如method createWithLang(langCode) returns <DAO>
使域对象具有语言感知能力,这意味着语言相关的方法明确地暴露语言代码。但是域对象已经需要知道所有语言中的所有文本以返回正确的或,它们需要直接访问某些DAO才能重新加载正确的文本。然后,懒惰地这样做是一个额外的挑战(关于ABAP OO)。
非常感谢每一条建议
答案 0 :(得分:1)
我可能会在getter和setter方法中添加一个参数来处理依赖于语言的文本,并将其默认值设置为SY-LANGU
。这样,l_foo = lr_bar->get_baz_text( )
将隐式获取用户登录语言的文本,l_foo = lr_bar->get_baz_text( l_target_language )
将以任何其他语言检索文本。您可能希望在创建对象时使用当前语言预取文本,并使用散列表来存储与语言相关的文本。
答案 1 :(得分:-1)
在SAP中,所选语言是会话的一部分。您的程序还可以有一个全局可用的“会话”单例,您可以在其中存储用户语言选择。