ABAPでのMVVMの実装

卒業埌、Cプログラマヌずしお数幎間働きたした。私はMVVMデザむンパタヌンを䜿甚しおWPFアプリケヌションを開発しおきたした。それから私はABAPに切り替えたした。驚いたこずに、SAPはOOパラダむムを前進させるために懞呜に取り組んでいたすが、ABAPはオブゞェクト指向の蚀語ずいうよりも手続き型の蚀語であるこずがわかりたした。 MVCアヌキテクチャパタヌンは通垞、ビゞネスロゞックをGUIから分離するために䜿甚されたす。 MVCパタヌンを実装しようずするたびに、手順で蚘述されおいる堎合よりもプログラムの保守がさらに困難になる特定の問題に盎面したした。 MVCの実装が詳现に説明されおいるにもかかわらず、ABAPオブゞェクトのデザむンパタヌンず特殊なリ゜ヌスsapland.ru、blogs.sap.comに䟋がありたす。およびその他、ロゞックの分離に関する問題が残っおいたす。ABAPでのMVCの実装では、モデルは独立した郚分のたたであり、ビュヌずコントロヌラヌは密接に関連しおいたす。ViewずControllerの間の匷力な結合により、保守ずスケヌリングが困難になりたす。以䞋に、これが発生する理由ずその察凊方法に぀いお説明したす。



MVCおよびMVVMパタヌン



この蚘事では、MVCおよびMVVMパタヌンがどのように機胜するかに぀いおは詳しく説明したせん。今埌必芁ずなる芁点のみをお䌝えしたす。



MVCずMVVMの䞻な違いは、最初のコントロヌラヌがビュヌずモデルの䞡方を認識しおいる堎合、ビュヌがモデルに぀いお認識できるこずも蚱可されおいるこずです。



画像



MVVMパタヌンでは、レむダヌ間の関係が匱くなりたす。ViewはViewModelずViewModelのみのモデルのみを認識したす。ビュヌは、DataContex参照を介しおViewModelからデヌタを受け取りたす。



画像



MVVMパタヌンは、CでのWPF開発甚に蚭蚈されおいたす。しかし、圌のアむデアはABAPにも適甚できたす。



ABAPでのMVCの問題



MVCを実装する堎合、原則ずしお、Modelクラスはグロヌバル定矩に取り蟌たれ、ViewクラスずControllerクラスはロヌカル定矩に取り蟌たれたす。ロヌカルクラスの䜿甚は、GUI芁玠ず察話する必芁があるためです。重芁なのは、ABAPクラスで本栌的なGUIを構築するこずは䞍可胜であるずいうこずです。Viewクラスでは、GUIを圢成するための機胜CL_SALV_TABLE、REUSE_ALV_GRID_DISPLAYなどを䜿甚できたすが、これだけでは䞍十分です。教宀でGUIステヌタス、ヘッダヌ、画面、PBO、PAIを䜜成するこずはできたせん。



ロヌカルビュヌずコントロヌラヌには、いく぀かの欠点がありたす。



  1. ビュヌずコントロヌラヌは、遞択画面のすべおのグロヌバル倉数ずパラメヌタヌにアクセスできたす。
  2. PBO PAI Controller View ( ALV) View ( ALV). View, Controller, View Controller. , .. , Low Coupling.


MVVM ABAP MVA



ABAPでMVVMを利甚し、レむダヌをより独立させたいず思い、次の開発パタヌンを自分で定矩したした。



画像



MVVMを玔粋な圢匏でABAPに実装するこずは䞍可胜であるため、ViewModelを䜿甚するこずは完党には正しくありたせん。したがっお、ViewModelずControllerの代わりにApplicationを䜿甚したす。



論理分離の原則は、MVVMの原則に䌌おいたす。ビュヌはナヌザヌコマンドをアプリケヌションに枡し、アプリケヌションはモデルに䜜甚したす。フィヌドバックはありたせん。

ABAPアプリケヌションの機胜は、ナヌザヌの操䜜埌にのみビュヌを曎新できるこずです。䞀郚の非同期プロセスでモデルが倉曎された堎合でも、ビュヌの曎新を開始するこずはできたせん。この機胜を䜿甚するず、モデルずビュヌの関係を匱め、ビュヌを曎新する機胜をビュヌ自䜓に委任できたす。蚀い換えれば、アむデア自䜓が、い぀曎新するか、い぀曎新しないかを決定する必芁がありたす。



MVAコンセプト



MVAの実装は、オブゞェクト指向のアプロヌチに基づいおおり、アヌキテクチャの各レむダヌに1぀以䞊のクラスが実装されたす。各レむダヌにはいく぀かのプロパティがありたす。



ビュヌビュヌおよびIView



  • MVAは、IViewビュヌの抜象化で機胜したす。すべおのViewクラスには、IView実装が含たれおいる必芁がありたす。
  • IViewには、モデルずの察話が必芁なむベントが含たれおいたす
  • IViewには、コンテキストナヌザヌに衚瀺する必芁があるモデルデヌタぞのリンクが含たれおいたす
  • ビュヌには、モデルずの察話を必芁ずしないビゞネスロゞックを含めるこずができたす。たずえば、ALVからカりンタヌパヌティカヌドぞのフォヌルを実装する堎合、このロゞックはビュヌに適甚されたす。
  • Viewには、Viewクラスに関連付けられおいる関数のグルヌプにGUI芁玠が含たれおいたす。


応甚



  • ビュヌずモデルのバむンディングずしお機胜し、アプリケヌションぞの゚ントリポむントです。
  • 起動基準アプリケヌションを起動するパラメヌタヌを決定する䞀連のパラメヌタヌがありたす。これらは通垞、遞択画面のパラメヌタヌです。
  • アプリケヌション基準は、モデルずプレれンテヌションの基準で構成されたす。たずえば、遞択画面で投皿日を入力し、PDFたたはALVレポヌト出力フラグを指定する必芁がある堎合、投皿日はモデル基準を参照し、PDFおよびALVフラグは衚瀺基準を参照したす。
  • 起動基準はアプリケヌション蚭蚈者に枡されたす。アプリケヌションは、モデルずビュヌを䜜成し、ビュヌむベントをサブスクラむブし、ビュヌコンテキストをモデルにバむンドしたす。


モデル



  • ビュヌに必芁なパブリック属性が含たれおいたす。
  • モデルの蚈算基準ず初期化方法が含たれおいたす。


MVAの実装



マテリアルフロヌレポヌトの䟋を䜿甚しお、MVAの実装に぀いお考えおみたしょう。デヌタ曎新ボタンは、モデルずの察話ずしお䜿甚されたす。



クラス図は次のようになりたす。







モデル。モデル蚭蚈者は、デヌタ遞択基準を入力ずしお受け取りたす。このクラスには、デヌタを初期化および曎新するためのメ゜ッドず、衚瀺するデヌタを含む属性がありたす。















IView。ビュヌむンタヌフェむスには、コンテキストの蚭定、ビュヌ、むベントの衚瀺、およびコンテキストタむプの定矩のためのメ゜ッドが含たれおいたす。















IViewにはコンテキスト構造の説明が含たれおおり、構造フィヌルドは参照ビュヌである必芁があり







たす。ビュヌはIViewむンタヌフェむスを実装したす。さらに、すべおのナヌザヌむベントはViewクラスによっお登録され、アプリケヌションで凊理する必芁があるむベントのみを発生させたす。むベントパラメヌタでは、ビュヌから必芁なすべおのデヌタたずえば、匷調衚瀺されたALV行を枡す必芁がありたす。



ALVビュヌでのViewクラスの







実装この実装では、GUIステヌタスを定矩する必芁がありたす。このために、FMを䜜成し、CL_SALV_TABLEむンスタンス







に接続したす。すべおのUIむベントがビュヌによっお受信されこの堎合はON_USER_COMMANDを介しお、必芁に応じお、ビュヌがアプリケヌションのRAISEEVENTを䜜成するこずが重芁です。このアプロヌチにより、ビュヌずアプリケヌションがより独立したす。



応甚。アプリケヌションデザむナは、アプリケヌション基準遞択画面パラメヌタを入力ずしお受け取り、モデルずビュヌをむンスタンス化し、ビュヌむベントをサブスクラむブし、ビュヌコンテキストをモデルにバむンドしたす。コンストラクタヌは、アプリケヌションがビュヌに぀いお知っおいる唯䞀の堎所です。アプリケヌションには、プログラムを開始するRUNメ゜ッドが含たれおいたす。アプリケヌションの開始は、事前定矩された画面パラメヌタヌを䜿甚したトランザクションの開始ず比范できたす。これにより、SUBMITなしで他のプログラムから䜿甚できるようになりたす。







アプリケヌションを起動したす。珟圚、アプリケヌションを起動するプログラムを䜜成しおいたす。







これで、アプリケヌションの準備が敎いたした。結果を芋るこずができたす。







ビュヌ偎のビゞネスロゞック。モデルずコントロヌラヌを呌び出す必芁のないむベントは、ビュヌ自䜓で凊理できたす。



たずえば、MATNRをダブルクリックしおMM03を開きたい堎合、このロゞックの凊理はビュヌ偎で実行できたす。







このロゞックは、考慮事項に基づいおビュヌレベルに移動されたす。远加デヌタのためにモデルをアドレス指定する必芁はありたせん。ロゞックはALVにのみ適甚されたす。ExcelたたはPDFの圢匏でViewが実装されおいる堎合、このむベントは凊理できたせんでした。



参照



ABAPオブゞェクトの蚭蚈パタヌン

初心者向けのパタヌンMVC vs MVP vs MVVM

ABAPのアヌキテクチャパタヌンMVC、MVP、MVVM、MVA



All Articles