تنفيذ MVVM في ABAP

بعد التخرج ، عملت كمبرمج C # لعدة سنوات. لقد قمت بتطوير تطبيقات WPF باستخدام نمط تصميم MVVM. ثم تحولت إلى ABAP. لدهشتي كثيرًا ، اكتشفت أن ABAP هي لغة إجرائية أكثر من كونها لغة موجهة للكائنات ، على الرغم من أن SAP تعمل بجد لتطوير نموذج OO. لفصل منطق الأعمال عن واجهة المستخدم الرسومية ، عادة ما يتم استخدام النمط المعماري MVC. في كل مرة حاولت فيها تنفيذ نموذج MVC ، واجهت بعض الصعوبات التي تجعل الحفاظ على البرنامج أكثر صعوبة مما لو كان مكتوبًا في إجراءات. على الرغم من حقيقة أن تنفيذ MVC موصوف بالتفصيل ومع أمثلة في كتاب أنماط التصميم في كائنات ABAP وعلى الموارد المتخصصة ( sapland.ru ، blogs.sap.comوغيرها) ، تبقى مشاكل فصل المنطق. في تنفيذ MVC على ABAP ، يظل النموذج جزءًا مستقلاً ، ويرتبط العرض والتحكم ارتباطًا وثيقًا. يجعل الاقتران القوي بين العرض والتحكم من الصعب صيانته وتوسيع نطاقه. فيما يلي وصف لماذا يحدث هذا وماذا تفعل حيال ذلك.



أنماط MVC و MVVM



لن أصف بالتفصيل كيفية عمل أنماط MVC و MVVM في هذه المقالة. سأقدم فقط النقاط الرئيسية التي سنحتاجها في المستقبل.



يتمثل الاختلاف الرئيسي بين MVC و MVVM في أنه في وحدة التحكم الأولى تعرف كلاً من العرض والنموذج ، يُسمح أيضًا أن تعرف طريقة العرض بالنموذج.



صورة



في نمط MVVM ، تكون العلاقة بين الطبقات أضعف. عرض يعرف فقط نموذج ViewModel و ViewModel فقط. تستقبل طريقة العرض البيانات من ViewModel عبر مرجع DataContex.



صورة



تم تصميم نمط MVVM لتطوير WPF في C #. ولكن يمكن تطبيق فكرته على ABAP أيضًا.



مشاكل MVC في ABAP



عند تنفيذ MVC ، كقاعدة عامة ، يتم إدخال فئات النموذج في التعريف العام ، وفئات العرض والتحكم في التصنيف المحلي. يرجع استخدام الفئات المحلية إلى الحاجة إلى التفاعل مع عناصر واجهة المستخدم الرسومية. الحقيقة هي أنه لا يمكنك إنشاء واجهة مستخدم رسومية كاملة في فئات ABAP. في فئات العرض ، يمكنك استخدام الوظيفة لتشكيل واجهة المستخدم الرسومية (CL_SALV_TABLE ، REUSE_ALV_GRID_DISPLAY ، إلخ) ، لكن هذا لا يكفي. من المستحيل إنشاء حالات واجهة المستخدم الرسومية والرؤوس والشاشات و PBO و PAI في الفصل.



العرض المحلي والتحكم لهما عيوب عديدة:



  1. العرض والتحكم لديهم حق الوصول إلى جميع المتغيرات العامة والمعلمات لشاشة الاختيار.
  2. PBO PAI Controller View ( ALV) View ( ALV). View, Controller, View Controller. , .. , Low Coupling.


MVVM ABAP MVA



رغبة في الاستفادة من MVVM في ABAP وجعل الطبقات أكثر استقلالية ، حددت نمط التطوير التالي بنفسي.



صورة



نظرًا لأنه من المستحيل تنفيذ MVVM في شكله النقي على ABAP ، فليس من الصحيح تمامًا استخدام ViewModel. لذا بدلاً من ViewModel و Controller ، أستخدم التطبيق.



مبدأ الفصل المنطقي مشابه لمبدأ MVVM. يقوم العرض بتمرير أوامر المستخدم إلى التطبيق ، ويعمل التطبيق على النموذج. لا توجد ملاحظات.

تتمثل إحدى ميزات تطبيقات ABAP في أنه لا يمكن تحديث العرض إلا بعد إجراء المستخدم. حتى إذا غيرت بعض العمليات غير المتزامنة النموذج ، فلن تتمكن من بدء تحديث العرض. تتيح لك هذه الميزة إضعاف علاقة عرض النموذج وتفويض وظيفة تحديث العرض إلى العرض نفسه. بمعنى آخر ، يجب أن تقرر الفكرة نفسها متى تجدد نفسها ومتى لا.



مفهوم MVA



يعتمد تنفيذ MVA على نهج موجه للكائنات ، حيث سيتم تنفيذ فئة واحدة أو أكثر لكل طبقة من طبقات البنية. كل طبقة لها عدد من الخصائص.



عرض (عرض و IView):



  • يعمل MVA مع طريقة عرض IView المجردة. يجب أن تحتوي جميع فئات العرض على تنفيذ IView.
  • يحتوي IView على الأحداث التي تتطلب التفاعل مع النموذج
  • يحتوي IView على سياق - رابط إلى بيانات النموذج التي يجب عرضها على المستخدم
  • يمكن أن تحتوي طريقة العرض على منطق الأعمال الذي لا يتطلب التفاعل مع النموذج. على سبيل المثال ، إذا كنت تريد تنفيذ سقوط في بطاقة الطرف المقابل من ALV ، فسيتم تطبيق هذا المنطق على العرض.
  • يحتوي العرض على عناصر واجهة المستخدم الرسومية في مجموعة من الوظائف المرتبطة بفئة العرض.


تطبيق:



  • بمثابة رابط للعرض والنموذج وهو نقطة الدخول إلى التطبيق.
  • لديه معايير الإطلاق - مجموعة من المعلمات التي تحدد مع أي معلمات يجب تشغيل التطبيق. هذه هي عادة معلمات شاشة الاختيار.
  • تتكون معايير التطبيق من معايير النموذج والعرض. على سبيل المثال ، إذا تطلبت منك شاشة التحديد إدخال تاريخ ترحيل وتحديد علامة إخراج تقرير PDF أو ALV ، فإن تاريخ الترحيل سيرجع إلى معايير النموذج وعلامة PDF و ALV إلى معايير العرض.
  • يتم تمرير معايير التشغيل إلى مصمم التطبيق. يقوم التطبيق بإنشاء نموذج وطريقة عرض ، والاشتراك في عرض الأحداث ، وربط سياق العرض بالنموذج.


نموذج:



  • يحتوي على السمات العامة التي يحتاجها العرض.
  • يحتوي على معايير حساب النموذج وطريقة التهيئة.


تنفيذ MVA



دعنا نفكر في تنفيذ MVA باستخدام مثال تقرير تدفق المواد. سيتم استخدام زر تحديث البيانات كتفاعل مع النموذج.



سيبدو مخطط الفصل هكذا.







نموذج. سيأخذ مصمم النموذج معايير اختيار البيانات كمدخلات. سيكون للفصل طرق لتهيئة البيانات وتحديثها ، بالإضافة إلى سمة بها بيانات لعرضها.















انا اشاهد. تحتوي واجهة العرض على طرق لتعيين السياق ، وعرض طريقة العرض ، والأحداث ، وتعريف أنواع السياق.















يحتوي IView على وصف لهيكل السياق ، ويجب أن تكون حقول الهيكل مرجعًا







.طريقة العرض تنفذ واجهة IView. علاوة على ذلك ، يتم تسجيل جميع أحداث المستخدم بواسطة فئة العرض ولا تثير سوى تلك الأحداث التي يحتاج التطبيق إلى معالجتها. في معلمات الحدث ، يجب عليك تمرير جميع البيانات المطلوبة من العرض (على سبيل المثال ، خطوط ALV المميزة).



تنفيذ فئة العرض







في عرض ALV في هذا التنفيذ ، نحتاج إلى تحديد حالة واجهة المستخدم الرسومية ، لذلك سننشئ FM ونوصله بمثيل CL_SALV_TABLE







. هذا الأسلوب يجعل طريقة العرض والتطبيق أكثر استقلالية.



تطبيق.يأخذ مصمم التطبيق معايير التطبيق (معلمات شاشة التحديد) كمدخلات وينشئ النموذج والعرض ، ويشترك في عرض الأحداث ، ويربط سياق العرض بالنموذج. المُنشئ هو المكان الوحيد الذي يعرف فيه التطبيق طريقة العرض. يحتوي التطبيق على طريقة RUN التي تبدأ تشغيل البرنامج. يمكن مقارنة بدء تطبيق ببدء معاملة باستخدام معلمات شاشة محددة مسبقًا. هذا يسمح باستخدامه من البرامج الأخرى دون تقديم.







إطلاق التطبيق. نحن الآن نصنع برنامجًا سيطلق التطبيق.







هذا كل شيء ، التطبيق جاهز. يمكنك مشاهدة النتيجة.







منطق الأعمال على جانب العرض. يمكن معالجة الأحداث التي لا تتطلب استدعاء النموذج وجهاز التحكم في طريقة العرض نفسها.



على سبيل المثال ، إذا كنت ترغب في فتح MM03 بالنقر المزدوج على MATNR ، فيمكن معالجة هذا المنطق على جانب العرض.







تم نقل هذا المنطق إلى مستوى العرض بناءً على اعتبارات: ليست هناك حاجة للوصول إلى النموذج للحصول على بيانات إضافية ؛ المنطق ينطبق فقط على ALV ، أي إذا كان هناك تنفيذ للعرض في شكل Excel أو PDF ، فلا يمكن معالجة هذا الحدث.



مراجع



أنماط التصميم في أنماط كائنات ABAP

للمبتدئين: MVC مقابل MVP و MVVM

الأنماط المعمارية في ABAP: MVC ، MVP ، MVVM ، MVA



All Articles