أنماط التصميم - نماذج أنماط MVC للمبتدئين

نشرت: 2016-04-15

يشرح ما هو نمط MVC وما هو إطار عمل ASP.NET MVC كيف يعمل. يشرح أيضًا دورة حياة صفحة ASP.NET MVC وميزات ASP.NET MVC من حيث الإصدار.

قدمت العينات خطوات حكيمة لمساعدة المبتدئين على الفهم بسهولة وإتقان ASP.NET MVC.

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

عرض المشكلة:
  1. من الصعب بالفعل استخدام أنماط مختلفة في التطبيق مع الاستمرار في الحفاظ على التطبيق.
  2. باستخدام VS Test و NUnit و MBUnit وما إلى ذلك لاختبار طبقة منطق الأعمال ، ولكن لا تزال بعض العيوب موجودة في التطبيق كمنطق عمل متضمن في طبقة العرض التقديمي.
  3. تستخدم طبقة العرض التقديمي أو طبقة منطق الأعمال أو طبقة الوصول إلى البيانات في التطبيق ولكن لا تزال بحاجة أحيانًا إلى كتابة تعليمات برمجية متكررة في طبقة العرض التقديمي لاستهلاك أو استدعاء وحدات نمطية أخرى أو حالات استخدام أخرى.
  4. يتم حقن عيوب التكامل عندما نجري بعض التغييرات في الوحدات المتكاملة.
  5. يستغرق إصلاح العيوب والتحسينات وقتًا أطول لتحليل منطق طبقة العرض التقديمي وتبعيات تكاملها والتسبب في فتح عيوب جديدة.
  6. لا يمكن اختيار ASP.NET MVC لأن إنشاء واجهة المستخدم معقدة.
السبب الأساسي للمشكلة:

في طبقة العرض ،

  1. تحتوي الصفحة أو النموذج على عناصر تحكم تعرض بيانات مجال التطبيق. يمكن للمستخدم تعديل البيانات وإرسال التغييرات. تسترد الصفحة بيانات المجال وتعالج أحداث المستخدم وتغير عناصر التحكم الأخرى على الصفحة استجابةً للأحداث وتقدم بيانات المجال التي تم تغييرها. تضمين التعليمات البرمجية التي تؤدي هذه الوظائف في صفحة الويب بالإضافة إلى ذلك ، من الصعب مشاركة التعليمات البرمجية بين صفحات الويب التي تتطلب نفس السلوك. معقد الفصل ويصعب صيانته ويصعب اختباره.
  2. طبقة واجهة المستخدم ، ومنطق واجهة المستخدم ، ومنطق العرض ، ومنطق الأعمال مرتبطة بإحكام.
  3. تهتم طبقة العرض بدمج الوحدات النمطية أو حالات الاستخدام.
المحلول:
  1. اختر أفضل نمط لطبقة العرض التقديمي لفصل طبقة واجهة المستخدم ومنطق واجهة المستخدم ومنطق العرض ومنطق العمل كطبقتين منفصلتين لتسهيل فهم الكود والحفاظ عليه.
  2. قم بتمكين الاقتران السائب أثناء تطوير الوحدات أو أي حالات استخدام.
  3. تعظيم الكود الذي يمكن اختباره بالأتمتة. (من الصعب اختبار المشاهدات.)
  4. شارك التعليمات البرمجية بين الصفحات التي تتطلب نفس السلوك.
  5. افصل مسؤوليات العرض المرئي وسلوك معالجة الحدث إلى فئات مختلفة تسمى ، على التوالي ، العرض والمقدم أو وحدة التحكم أو ViewModel.
فوائد استخدام نمط العرض التقديمي:
  1. نمطية
  2. النهج القائم على الاختبار - تعظيم الشفرة التي يمكن اختبارها بالأتمتة
  3. فصل الاهتمامات
  4. تقاسم التعليمات البرمجية بين الصفحات والنماذج
  5. سهل الصيانة

ما هي أنماط طبقة العرض المتاحة؟

MVC (وحدة تحكم عرض النموذج)

MVP (مقدم عرض النموذج) أو (نموذج العرض السلبي ، مراقب المشرف)

MVVM (نموذج عرض النموذج)

MVC مقابل MVP مقابل MVVM:
  1. يمثل النموذج والعرض نفسه في جميع الأنماط الثلاثة المذكورة أعلاه؟

    نعم

  2. الغرض من وحدة التحكم والمقدم ونموذج العرض هو نفسه في جميع الأنماط الثلاثة المذكورة أعلاه؟

    نعم

  3. الاتصال وتدفق النموذج والعرض باستخدام وحدة التحكم والمقدم و ViewModel هو نفسه؟

    لا ، هذا هو سبب وجود هذه الأنماط الثلاثة.

  4. هل هذه الأنماط تحل محل PL (طبقة العرض التقديمي) و BLL (طبقة منطق الأعمال) و DAL (طبقة الوصول إلى البيانات)

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

اختر أفضل نمط لطبقة العرض التقديمي:

أفضل لاعب

  1. لا يمكن الربط عبر نص بيانات
  2. تصميم معقد لواجهة المستخدم
  3. الأفضل لـ Windows Forms و ASP.NET Web Forms وتطبيقات Sharepoint

MVC

  1. الأفضل لـ ASP.NET مع واجهة مستخدم بسيطة
  2. نموذج غير متصل (عرض الفصل من كل الطبقات الأخرى)

ملاحظة: هنا لا أركز على MVC VM (MVC ViewModel من MVC3) و ASP.NET MVVM مع حقن التبعية.

MVVM

  1. من الممكن الربط عبر datacontext
  2. النموذج المتصل
  3. الأفضل لتطبيقات WPF و Silverlight
ASP.NET Web Forms مقابل ASP.NET MVC:

نماذج ويب ASP.NET

  1. راد
  2. تطوير أكثر سهولة
  3. النظام البيئي الضوابط الغنية
  4. مألوف كنهج التطوير لتطوير نماذج Windows
  5. لا يوجد ViewState ولا يوجد دعم إعادة النشر

ASP.NET MVC

  1. الفصل التام للمخاوف (SoC)
  2. تحكم كامل في الترميز
  3. تمكين TDD (اختبار يحركه التطوير)
  4. تمكين ويجعل REST بسهولة
  5. تكامل أكثر سهولة من جانب العميل (جافا سكريبت)
  6. محرك متعدد الرؤية (هذا رائع حقًا!)
  7. لا يوجد ViewState ولا يوجد دعم إعادة النشر
  8. قابل للتوسيع وتمكين WEB 2.0

النموذج ، وجهات النظر والتحكم

  • النموذج : كائنات النموذج هي أجزاء التطبيق التي تنفذ منطق مجال بيانات التطبيق. في كثير من الأحيان ، تقوم كائنات النموذج باسترداد حالة النموذج وتخزينها في قاعدة بيانات. على سبيل المثال ، قد يقوم كائن المنتج باسترداد المعلومات من قاعدة بيانات والعمل عليها ثم كتابة المعلومات المحدثة مرة أخرى إلى جدول المنتجات في SQL Server.
  • طرق العرض : المشاهدات هي المكونات التي تعرض واجهة مستخدم التطبيق (UI). عادة ، يتم إنشاء واجهة المستخدم هذه من بيانات النموذج. من الأمثلة على ذلك طريقة عرض التحرير لجدول المنتجات الذي يعرض مربعات النص والقوائم المنسدلة ومربعات الاختيار بناءً على الحالة الحالية لكائن المنتجات.
  • وحدة التحكم : أدوات التحكم هي المكونات التي تتعامل مع تفاعل المستخدم ، وتعمل مع النموذج ، وفي النهاية تحدد طريقة عرض لعرضها على واجهة المستخدم. في تطبيق MVC ، يعرض العرض المعلومات فقط ؛ تتعامل وحدة التحكم مع مدخلات المستخدم وتفاعله وتستجيب لها. على سبيل المثال ، تتعامل وحدة التحكم مع قيم سلسلة الاستعلام ، وتمرر هذه القيم إلى النموذج ، والذي بدوره يستعلم عن قاعدة البيانات باستخدام القيم.
ASP.NET MVC دورة حياة الصفحة عالية المستوى؟

ASP.NET MVC High Level Page Life Cycle

ASP.NET MVC منخفض المستوى دورة حياة الصفحة؟

ASP.NET MVC Low Level Page Life Cycle

ميزات جديدة MVC2.0

1. أدوات المساعدة النموذجية:

تساعدنا أداة المساعدة النموذجية على ربط عناصر HTML تلقائيًا لتحريرها وعرضها مع أنواع البيانات.

على سبيل المثال ، عند عرض بيانات من النوع System.DateTime في طريقة عرض ، يمكن عرض عنصر واجهة مستخدم منتقي البيانات تلقائيًا.

هذا مشابه لكيفية عمل قوالب الحقول في ASP.NET Dynamic Data.

2. المجالات:

استخدام المناطق يمكننا تنظيم مشروع كبير إلى عدة أقسام أصغر من أجل إدارة تعقيد تطبيق ويب كبير.

يمثل كل قسم ("منطقة") عادةً قسمًا منفصلاً من موقع ويب كبير ويتم استخدامه لتجميع مجموعات ذات صلة من وحدات التحكم وطرق العرض.

على سبيل المثال

[xhtml]
المناطق
مشرف
تحكم
عارضات ازياء
الآراء
مطالبات Iniala
تحكم
عارضات ازياء
الآراء
[/ xhtml]

3. دعم وحدات التحكم غير المتزامنة:

يسمح ASP.NET MVC2 لوحدات التحكم بمعالجة الطلبات بشكل غير متزامن.

يمكن أن يؤدي ذلك إلى مكاسب في الأداء من خلال السماح للخوادم التي كثيرًا ما تستدعي عمليات الحظر (مثل طلبات الشبكة) للاتصال بنظرائها غير المحظورين بدلاً من ذلك.

4. دعم DefaultValueAttribute في معاملات أسلوب العمل:

تسمح الفئة System.ComponentModel.DefaultValueAttribute بتوفير قيمة افتراضية لمعلمة الوسيطة لأسلوب الإجراء.

على سبيل المثال ، افترض أنه تم تحديد المسار الافتراضي التالي:

[الشفرة]
{Controller} / {action} / {id}
[/الشفرة]

افترض أيضًا أنه تم تحديد طريقة التحكم والإجراء التالية:

[الشفرة]
المادة العامة ArticleController
{
عرض ActionResult العام (معرف int، [DefaultValue (1)] صفحة int)
{
}
}
[/الشفرة]

سيستدعي أي من عناوين URL للطلبات التالية طريقة عرض العرض المحددة في المثال السابق.

  • / مقال / عرض / 123
  • / مقال / عرض / 123؟ الصفحة = 1 (فعليًا نفس الطلب السابق)
  • / مقال / عرض / 123؟ الصفحة = 2
5. دعم ربط البيانات الثنائية مع موديلات الموديلات:

هناك نوعان من الأحمال الزائدة الجديدة لـ Html.Hidden المساعد الذي يقوم بترميز القيم الثنائية كسلاسل مشفرة بالأساس 64:

[الشفرة]
السلسلة العامة الثابتة المخفية (HtmlHelper htmlHelper ، اسم السلسلة ، القيمة الثنائية) ؛
السلسلة العامة الثابتة المخفية (HtmlHelper htmlHelper ، اسم السلسلة ، قيمة البايت []) ؛
[/الشفرة]

6. دعم سمات DataAnnotations :

استخدام سمات التحقق من صحة RangeAttribute و RequiredAttribute و StringLengthAttribute و RegexAttribute (المحددة في مساحة الاسم System.ComponentModel.DataAnnotations ) عندما نلتزم بنموذج لتوفير التحقق من صحة الإدخال.

[الشفرة]
باستخدام System.ComponentModel.DataAnnotations ؛
مساحة الاسم MvcTmpHlprs
{
[نوع البيانات الوصفية (typeof (ProductMD))]
فئة جزئية عامة المنتج
{
ProductMD من الدرجة العامة
{
الكائن العام SellStartDate {get؛ تعيين؛ }
[UIHint ("rbDate")]
الكائن العام SellEndDate {get؛ تعيين؛ }
[نوع البيانات (DataType.Date)]
الكائن العام DiscontinuedDate {get؛ تعيين؛ }
[ScaffoldColumn (خطأ)]
تاريخ التعديل للكائن العام {get؛ تعيين؛ }
[ScaffoldColumn (خطأ)]
الكائن العام rowguid {get؛ تعيين؛ }
[ScaffoldColumn (خطأ)]
الكائن العام ThumbnailPhotoFileName {get؛ تعيين؛ }
}
}
}
[/الشفرة]

7. موفرو مدقق النماذج:

تمثل فئة موفر التحقق من صحة النموذج تجريدًا يوفر منطق التحقق من صحة النموذج.

يتضمن ASP.NET MVC موفرًا افتراضيًا استنادًا إلى سمات التحقق من الصحة المضمنة في مساحة الاسم System.ComponentModel.DataAnnotations .

8. التحقق من جانب العميل:

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

يتضمن ASP.NET MVC 2 مكتبة التحقق من صحة العميل والمحول الذي يدعم سمات التحقق من صحة مساحة الاسم DataAnnotations المذكورة سابقًا.

9. عامل تصفية إجراء RequireHttpsAttribute الجديد:

يتضمن ASP.NET MVC 2 فئة RequireHttpsAttribute جديدة يمكن تطبيقها على أساليب العمل ووحدات التحكم.

بشكل افتراضي ، يعيد الفلتر توجيه طلب غير SSL (HTTP) إلى مكافئ SSL (HTTPS).

10. تجاوز فعل أسلوب HTTP:

عندما نبني موقعًا إلكترونيًا باستخدام النمط المعماري REST ، تُستخدم أفعال HTTP لتحديد الإجراء الذي يجب تنفيذه لمورد ما.

يتطلب REST أن تدعم التطبيقات النطاق الكامل لأفعال HTTP الشائعة ، بما في ذلك GET و PUT و POST و DELETE .

يتضمن ASP.NET MVC 2 سمات جديدة يمكن أن نطبقها على أساليب العمل وهذه الميزة في بناء الجملة المضغوط.

تعمل هذه السمات على تمكين ASP.NET MVC من تحديد أسلوب إجراء يعتمد على فعل HTTP.

على سبيل المثال ، سيستدعي طلب POST طريقة الإجراء الأول وسيقوم طلب PUT باستدعاء طريقة الإجراء الثانية.

[الشفرة]
[HttpPost]
العامة ActionResult Edit (int id)

[HttpPut]
العامة ActionResult Edit (int id، Tag tag)
[/الشفرة]

في الإصدارات السابقة من ASP.NET MVC ، تطلبت أساليب الإجراء هذه صياغة مطولة أكثر ، كما هو موضح في المثال التالي:

[الشفرة]
[AcceptVerbs (HttpVerbs.Post)]
العامة ActionResult Edit (int id)

[AcceptVerbs (HttpVerbs.Put)]
العامة ActionResult Edit (int id، Tag tag)
[/الشفرة]

نظرًا لأن المستعرضات تدعم فقط أفعال HTTP GET و POST ، فلا يمكن النشر على إجراء يتطلب فعلًا مختلفًا. وبالتالي ليس من الممكن دعم جميع طلبات RESTful محليًا.

ومع ذلك ، لدعم طلبات RESTful أثناء عمليات POST ، يقدم ASP.NET MVC 2 طريقة مساعد HTML جديدة HttpMethodOverride .

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

على سبيل المثال ، باستخدام طريقة مساعد HTML HttpMethodOverride ، يمكننا أن نجعل إرسال النموذج يبدو وكأنه طلب PUT أو DELETE .

يؤثر سلوك HttpMethodOverride على السمات التالية:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11. فئة HiddenInputAttribute الجديدة لمساعدات القالب:

يمكننا تطبيق سمة HiddenInputAttribute الجديدة على خاصية النموذج للإشارة إلى ما إذا كان يجب تقديم عنصر إدخال مخفي عند عرض النموذج في قالب محرر (تحدد السمة قيمة UIHint ضمنية لـ HiddenInput ).

تتيح لنا خاصية DisplayValue الخاصة بالسمة تحديد ما إذا كانت القيمة معروضة في أوضاع المحرر والعرض.

عند ضبط DisplayValue على false ، لا يتم عرض أي شيء ، ولا حتى ترميز HTML الذي يحيط بالحقل عادةً.

القيمة الافتراضية لـ DisplayValue صحيحة.

قد نستخدم سمة HiddenInputAttribute في السيناريوهات التالية:

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

في هذه الحالة ، لا يتم عرض القيمة وعلامات HTML المحيطة (مثل التسمية والقيمة).

على سبيل المثال:

[الشفرة]
ProductViewModel فئة عامة
{
[HiddenInput] // ما يعادل [HiddenInput (DisplayValue = true)]
معرف int العامة {get؛ تعيين؛ }

اسم السلسلة العامة {get؛ تعيين؛ }

[HiddenInput (DisplayValue = false)]
بايت عام [] طابع زمني {get؛ تعيين؛ }
}
[/الشفرة]

12. يمكن لطريقة مساعد Html.ValidationSummary عرض أخطاء على مستوى النموذج:

بدلاً من عرض جميع أخطاء التحقق دائمًا ، فإن الأسلوب المساعد Html.ValidationSummary به خيار جديد لعرض الأخطاء على مستوى النموذج فقط.

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

13. تقوم قوالب T4 في Visual Studio بإنشاء التعليمات البرمجية الخاصة بالإصدار الهدف من .NET Framework:

تتوفر خاصية جديدة لملفات T4 من مضيف ASP.NET MVC T4 الذي يحدد إصدار .NET Framework الذي يستخدمه التطبيق.

يتيح ذلك لقوالب T4 إنشاء تعليمات برمجية وترميز خاص بإصدار من .NET Framework.

في Visual Studio 2008 ، تكون القيمة دائمًا .NET 3.5. في Visual Studio 2010 ، القيمة إما .NET 3.5 أو .NET4.

14. تحسينات API:

تمت إضافة طريقة CreateActionInvoker الافتراضية المحمية في فئة Controller.

يتم استدعاء هذه الطريقة بواسطة خاصية ActionInvoker الخاصة بوحدة التحكم وتسمح بإنشاء مثيل بطيء للمستدعي إذا لم يتم تعيين مستدعي بالفعل.