0

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

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

  • 在 DAO 的 crud 和 find-by 方法中明确包含语言键?这将要求 DAO 的任何客户端也公开其方法的语言密钥,并正确地将其传递给有味道的 DAO。例如method read(id, languageCode) returns <thing>。此外,我希望域对象对 DAO/基础设施垃圾一无所知。

  • 为 DAO 本身提供一个语言感知接口,允许我创建另一个绑定到不同语言(工厂)的 DAO 实例。这需要我显式访问 DAO,否则这些 DAO 也很隐蔽。例如method createWithLang(langCode) returns <DAO>

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

每一个建议都非常感谢

4

2 回答 2

1

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

于 2013-08-27T19:21:25.930 回答
-1

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

于 2013-08-24T12:40:33.857 回答