2013-08-23 106 views
0

我爲我的數據庫表創建了DAO。在SAP ABAP中,您可以添加包含語言相關文本的其他文本表(語言代碼是該鍵的一部分)。 目前,我在程序開始時(依賴注入)創建了DAO實例,並向它們傳遞了一種語言鍵,它將DAO有效地綁定到特定的語言,讓DAO僅從該特定的語言中讀取文本。語言依賴DAO(i18n)

但是在程序的後期,我需要從另一種語言獲取文本。我該如何處理這個問題?

  • 明確將語言鍵包含在DAO的crud和find-by方法中?這將要求DAO的任何客戶也將其方法暴露給語言鍵,並將其正確地傳遞給DAO,該DAO聞起來有味道。例如method read(id, languageCode) returns <thing>。另外我想讓域對象不知道DAO /基礎設施廢話。

  • 給DAO本身一個語言感知接口,它允許我創建另一個綁定到不同語言(工廠)的DAO實例。這就要求我明確地訪問DAO,否則這些DAO是隱藏的,也會聞到。例如method createWithLang(langCode) returns <DAO>

  • 使域對象具有語言意識,這意味着語言相關的方法顯式地公開語言代碼。但是,域對象已經需要知道所有語言的所有文本才能返回正確的文本他們需要直接訪問某些DAO以重新加載正確的文本。然後,這樣做是一個額外的挑戰(關於ABAP OO)。

每個建議不勝感激

回答

-1

在SAP中,所選擇的語言是會話的一部分。你的程序也可以有一個全球可用的'會話'單身人士,你可以存儲用戶語言選擇。

+0

是的,我最需要的只是會話語言。但是在某些應用環境中,我需要使用另一種語言,這是由正在處理的業務合作伙伴確定的。然後,所有的DAO都綁定到我的會話語言上已經太遲了。我不想改變這個全球會話實例的語言,這將會與全局玩家一起玩,最終導致你的死亡。有什麼建議? – hotzen

+0

最簡單的事情聽起來就像創建一個新的會話,專門處理我認爲是BP相關的輸出。 – tomdemuyt

1

我可能會在getter和setter方法中添加一個參數來處理與語言相關的文本,並將其缺省值設置爲SY-LANGU。這樣,l_foo = lr_bar->get_baz_text()將隱式地獲取用戶使用的語言的文本,並且l_foo = lr_bar->get_baz_text(l_target_language)將以任何其他語言檢索文本。您可能希望在創建對象時使用當前語言預取文本,並使用散列表來存儲與語言相關的文本。

+0

謝謝。如果我的域對象有一個方法get_baz_text(i_lang = sy-langu),則域對象將負責以指定語言加載文本。然而,我目前的設計實例化了已加載的與語言相關的文本的對象,因此該對象無法用任何其他語言重新加載文本。我寧願保持域對象和數據訪問之間的分離。有什麼建議? – hotzen

+0

是的。不要過頭。對於一個美麗的技術設計,你不會得到任何額外的積分,就像那樣可悲。 – vwegert

+0

謝謝;)5moretogo ... – hotzen