برمجة موجهة نحو MVC AOP
أعتقد أن الجميع لم يتعرضوا للكلمة AOP ، ولكن في الواقع تعرضت لها بالفعل ، فقط في وضع التصميم. إن الفكرة المستخدمة من قبل AOP هي في الواقع نفس نمط التصميم ، أي أن الوظائف تتم إضافتها أو تعديلها دون تعديل الكود الأصلي. أيضًا ، يستخدم AOP في الغالب في فصل الربيع ، ولكن ما هو مكتوب في هذه المقالة يستخدم فقط في MVC ، لذا كن حذرًا.
1. مقدمة
يعني ما يسمى AOP (اختصار للبرمجة الموجهة إلى جانب) تقنية تنفذ صيانة موحدة لوظائف البرنامج من خلال أساليب التحميل المسبق والعوامل الديناميكية أثناء وقت التشغيل. AOP هو استمرار لـ OOP ، وهو موضوع ساخن في تطوير البرمجيات ، وجزء مهم من إطار الربيع ، ونموذج مشتق للبرمجة الوظيفية. يمكن عزل الأجزاء المختلفة من منطق العمل باستخدام AOP ، وبالتالي تقليل الاقتران بين أجزاء مختلفة من منطق العمل ، وتحسين قابلية استخدام البرنامج ، وتحسين كفاءة التطوير.
ما سبق هو التفسير الرسمي لموارد Baidu ، ولكن في رأيي ، فإن AOP هو في الواقع نوع من التفكير ، وهو نوع من التفكير يمكن أن يتحرك وربط الجسم كله. يواجه AOP فعليًا أكثر من هيئة برنامج مكتوبة بواسطة وظيفة موافقة أو عملية استدعاء. من جانبها الأول ، الذي يشير إلى جانب ما ، يمكننا أيضًا أن نفهم أن هذه الطريقة هي تنفيذ جانب واحد. هذا يشبه في الواقع الملف العالمي في MVC ، وهو أيضًا جزء مهم من إطار الربيع. إنه نموذج مشتق للبرمجة الوظيفية. يمكن عزل الأجزاء المختلفة من منطق العمل باستخدام AOP ، وبالتالي تقليل الاقتران بين أجزاء مختلفة من منطق العمل ، وتحسين قابلية استخدام البرنامج ، وتحسين كفاءة التطوير.
ثانياً ، يمكن لطبيعة التثبيت المسبقة التعامل مع بعض الأخطاء بشكل جيد أو تحيز بعض المواقف ، مما يؤدي أيضًا إلى أن تصبح أكثر شيوعًا في أذونات الحكم والإخراج الموحد لشيء ما عند التصميم. "يمكن تحقيق التكنولوجيا من خلال أساليب التجميل المسبق والوكيل الديناميكي أثناء وقت التشغيل لإضافة وظائف ديناميكية إلى البرامج دون تعديل الكود المصدري. AOP هو في الواقع استمرار لنمط تصميم GOF. نمط التصميم هو متابعة بلا كلل من أجل الفصل بين هذا الهدف". الجملة أعلاه هي أيضا تفسير جيد لـ AOP.
2. التنفيذ في MVC
بعد قوله كثيرًا ، دعونا نلقي نظرة. أولاً ، نحتاج إلى إنشاء مشروع MVC جديد في Vs. ، حدد MVC3 أو 4 ، وهو على ما يرام ، ثم إنشاء وحدة تحكم ، وتسميته في الإرادة ، ثم إنشاء عرضه ، واكتب أبسط HelloWorld في العرض.
<! doctype html> <html> <head> <title> index </title> </head> <body> <viv> <a> مرحبًا! World </a> </viv> </body> </html>
تُظهر الصورة الموجودة على اليمين حل MVC الذي قمت بإنشائه ووحدة التحكم المضافة والعرض. اكتب الرمز أعلاه في العرض لعرض Hello! عالم.
بعد التشغيل (لا يعمل) هل تظهر كلمة HelloWorld على صفحة الويب؟
حسنًا ، نبدأ بعد ذلك في إنشاء ملف AOP جديد ثم نستخدمه. أولاً ، أضف فصلًا جديدًا إلى هذا المشروع ، يسمى FilterPublic ، أضف المرجع باستخدام System.Web.mvc في المرجع ، ثم اترك هذه الفئة ترث من ActionFilterattribute. يجب على الجميع الانتباه إلى كلمة الإجراء ، مما يعني أن هذا الشيء يعتمد على العمل.
ثم نكتب الرمز التالي:
رسالة السلسلة العامة {get ؛ تعيين؛ } تجاوز عام void onActionExecuting (ActionExecutingContext filterContext) {base.onactionExecuting (filterContext) ؛ FilterContext.httpcontext.response.write ("قبل تنفيذ الإجراء" + رسالة + "<br />") ؛ } تجاوز عام void onActionExecuted (ActionExecutionContext filterContext) {base.onactionExecuted (filterContext) ؛ FilterContext.httpcontext.response.write ("بعد تنفيذ الإجراء" + message + "<br />") ؛ } تجاوز عام void onResultExecuting (resultexecutingContext filterContext) {base.onresultexecuting (filterContext) ؛ FilterContext.httpcontext.response.write ("إرجاع قبل النتيجة" + رسالة + "<br />") ؛ } تجاوز عام void onResultExecuted (resultexecuteContext filterContext) {base.onresultexecution (filterContext) ؛ FilterContext.httpcontext.response.write ("إرجاع بعد النتيجة" + رسالة + "<br />") ؛ }هذه هي الإجراءات المختلفة الناتجة عن المرشح ، ثم نقوم بإجراء التعديلات التالية على الطريقة الافتراضية في وحدة التحكم:
[<span style = "font-size: 18px ؛"> filterpublic </span> (message = "Action") exclureResult index () {httpcontext.response.write ("الإجراء يتم تنفيذ ・・ <br />") ؛ إرجاع محتوى ("النتيجة ・・ <br />") ؛ } ثم أضف جملة [FilterPublic (Message = "Controller")] على فئة فئة وحدة التحكم ، ثم قم بتشغيلها. ماذا سيحدث؟
الإجراء قبل تنفيذ الإجراء التنفيذي ・・・ بعد نتيجة إرجاع الإجراءات التنفيذية ، فإن إجراء التنفيذ يعود إلى النتيجة
يمكنك أن ترى أنه قبل تنفيذ الطريقة الموجودة في وحدة التحكم ، سنقوم أولاً بتنفيذ الرمز في FilterPublic التي حددناها أدناه. وبما أن الإجراء يحدث في أوقات مختلفة ، يمكننا أيضًا معرفة الطريقة التي يتم تشغيلها.
ومع ذلك ، فإن الطريقة المستندة إلى وحدة التحكم المكتوبة على وحدة التحكم لم تؤد. لماذا هذا؟
في الواقع ، هذه المشكلة بسيطة للغاية. عندما أنشأنا برنامج AOP الخاص بنا ، لم نضع المعلمات ولم نسمح بتربية المرشحات. في هذا الوقت ، نضيف فقط: [AttributeUsage (AttributeTargets.All ، allomultiple = true)] إلى فئة Filterpublic التي كتبتها ، ويمكننا تشغيل العديد من المرشحات أو المرشحات المتراكبة. في هذا الوقت ، لنحاول الجري:
تحكم قبل تنفيذ الإجراء. يتم تنفيذ الإجراء. يتم تنفيذ الإجراء. بعد تنفيذ الإجراء. يتم تنفيذ الإجراء. بعد تنفيذ الإجراء. يعود وحدة التحكم قبل النتيجة. يعود وحدة التحكم قبل النتيجة. العمل يعود بعد النتيجة. العمل يعود بعد النتيجة. يعود وحدة التحكم بعد النتيجة.
وبهذه الطريقة ، يتم تشغيل المرشح الموجود على وحدة التحكم أيضًا ، لذلك عندما نستخدم طريقة AOP ، نحتاج فقط إلى كتابة علامة فئة مرشح على الطريقة المكتوبة الخاصة بنا أو طريقة التحميل الافتراضية للصفحة.
لذا ، إذا كانت لدينا وظيفة تتطلب تشغيل جميع الصفحات ، فلن تكون مزعجة؟ لا تقلق ، حان دورنا للعمل في هذا الوقت. ما عليك سوى تسجيل المرشح الذي كتبته تحت طريقة registerglobalfilters ضمن ملف Global.asax:
public static void registerglobalfilters (GlobalFilterCollection filters) {filters.add (new GeneaterRorattribute ()) ؛ // حدد المرشح الخاص بك على أنه مرشحات عالمية. }ثم قم بالتشغيل وشاهد النتائج:
الإجراء قبل تنفيذ الإجراء العالمي قبل إجراء إجراء وحدة تحكم التنفيذ قبل إجراء التنفيذ قبل تنفيذ إجراء التنفيذ ・・・ بعد اتخاذ إجراء بعد إجراء التنفيذ بعد إجراء تنفيذ وحدة تحكم بعد التنفيذ نتيجة العائد العالمي قبل نتيجة الإرجاع العالمي قبل نتيجة إرجاع وحدة التحكم قبل إرجاع النتيجة بعد نتيجة الإرجاع بعد نتيجة الإرجاع
وبهذه الطريقة ، يتم الانتهاء من التشغيل العالمي (يتم استخدام الرسالة في المرشح فقط لتحديد التسلسل الهرمي ، ويمكن عدم تحديده عند استخدامه رسميًا.)
من هذا المنظور ، إذا كنت ترغب في إضافة طريقة عالمية بسرعة ، فأنت بحاجة فقط إلى إنشاء مرشح جديد ثم تغيير الملف العالمي. أليست مريحة للغاية؟
ما سبق هو بعض من بحثي الموجز عن AOP. إذا كان هناك أي أخطاء ، يرجى تصحيح لي.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!