2017-09-08 281 views
0

我有問題圍繞ABAP(SAP)中的MVC方法進行包裝。雖然我的問題不是代碼相關,而是與概念相關。MVC實現概念(概念(ABAP SAP)

情況:

該視圖需要1個參數。它創建控制器的對象並將參數傳遞給控制器​​。控制器將該輸入重新路由到模型。該模型向數據訪問類請求數據,檢索數據,爲該數據創建對象並將該對象返回給控制器。控制器將數據傳遞給視圖。它讀取對象的屬性並將它們打印到屏幕上。

特定設置:

我需要閱讀「業務夥伴」(名字&姓)在SAP並打印出來到屏幕的表。該方法應該是MVC,OO和一個單獨的數據訪問層(DAL)。 - 我的控制器在視圖中被實例化。在那裏它稱爲'RETRIEVE_BP(iv_BPart)'。 - 我的控制器基本重複對模型的調用(只是傳遞數據?) - 我的模型根據從DAL返回的數據創建本地對象。控制器調用模型時會返回此模型。 - 我是一個Singleton,用於從內部SAP表訪問和檢索數據。這將返回此表唯一的類型。在模型

方法從DAL檢索:在控制器

method RETRIEVE_BP. 

    data ls_bp TYPE BAPIBUS1006_CENTRAL_PERSON. 
    ls_bp = mo_dal->get_buspartner(EXPORTING iv_bpart = iv_bpart). 
    create OBJECT mo_bp EXPORTING firstname = ls_bp-firstname lastname = ls_bp-lastname. 
    rv_bpart = mo_bp. 

endmethod. 

方法:

method GET_BUSPARTNER. 

    rv_bpart = mo_mdl_bp->retrieve_BP(exporting iv_BPART = iv_BPART). 

endmethod. 

問題:

  • 因爲我的控制器沿着信息只是路過。這應該是一個靜態類嗎?否則,我的控制器應該在哪裏實例化?
  • 我應該在我的控制器中保留一個本地參考以保存我的模型。因此能夠通過控制器對象直接在視圖中訪問我的模型。從視圖中刪除需要使用傳入參數重複呼叫。
  • 我在哪裏構建「業務合作伙伴」對象以將其傳遞迴控制器。從那裏到視圖?
  • 我應該在哪裏打電話給我的DAL?
  • 如果我將我的模型從業務合作伙伴類中分離出來。模型應該是單身人士嗎?

在回答中,抽象出ABAP代碼並且僅僅使用Java或C#中的示例是完全正確的。我已經有一個工作解決方案。我要求提高我的理解力。

由於這些代碼是SAP系統的一部分,我避免了生成代碼示例,並且在沒有UI組件的情況下分發ABAP代碼非常麻煩。

一如果我在這裏發佈任何錯誤。請糾正我並指引我到正確的地方。如果缺少任何信息,我很樂意提供此信息。

回答

0

由於對MVC架構的不完全理解,我的邏輯有缺陷。這導致了一個獨立的模型類和一個'業務夥伴'類導致程序流程中的問題(什麼時候調用什麼)。

在看了幾個關於MVC設計的高級概述之後,我得出結論,這個術語更多較少被普遍接受。正如本教程中所解釋的:https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm

這個想法是: - 查看:負責捕獲輸入/顯示輸出。根本沒有處理。 - 控制器:處理程序流程。該對象負責實現程序應該能夠執行的所有「操作」,並將這些操作重定向到正確的部分。 - 模型:這些是您將在程序中使用的對象。 (在我的情況下:我的業務夥伴對象) - DAL:這是數據庫訪問的單例。

答案:

  • 沒有控制器不應該是一個靜態類。它應該是主程序中創建的對象。之後,視圖應該訪問控制器對象。
  • 否應該沒有引用(或私人引用)。視圖不應該能夠通過使用控制器中的引用直接到達模型。這是MVC架構關注原則的分離。
  • 控制器有一個方法'檢索BP'。此方法調用DAL。此DAL從數據庫中檢索它,創建BP模型的對象。將此對象返回給控制器=>到視圖。
  • 查看上面的問題。
  • 這些模型反駁業務邏輯,因爲這是您的程序將與之合作的對象。 (在我的情況下,'商業夥伴')