دليل المبتدئين إلى هندسة MVC في جافا

نشرت: 2018-04-10

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

جدول المحتويات

ما هي بالضبط هندسة MVC؟

قبل أن ندخل في الجوانب الفنية لذلك ، دعنا نوضح بعض الأشياء - MVC ليس نمط تصميم ، إنه طريقة لهيكلة تطبيقاتك. في السنوات الأخيرة ، تستخدم تطبيقات الويب على نطاق واسع بنية MVC ، وبالتالي من الطبيعي أن تخلط بينها وبين نمط تصميم حصري لتطبيقات الويب. ومع ذلك ، دعنا نخبرك أن MVC تم وصفه لأول مرة في عام 1979 - قبل عصر WWW عندما لم يكن هناك مفهوم لتطبيقات الويب. الهندسة المستخدمة اليوم لتطبيقات الويب هي تكيف للنمط الأصلي.
في الواقع ، تم تضمين هذه البنية في البداية في إطارين رئيسيين لتطوير الويب - Struts و Ruby on Rails. مهدت هاتان البيئتان الطريق لغالبية أطر عمل الويب التي ظهرت لاحقًا - وبالتالي استمرت شعبية هذه البنية في الارتفاع.

تعلم كيفية إنشاء تطبيقات مثل Swiggy و Quora و IMDB والمزيد

يتبع النمط المعماري لـ MVC فكرة أولية - يجب علينا فصل المسؤوليات في أي تطبيق على الأسس التالية:

  • النموذج: يعالج البيانات ومنطق الأعمال.
  • عرض: يقدم البيانات إلى المستخدم متى طلب ذلك.
  • وحدة التحكم: تسلي طلبات المستخدم وجلب الموارد اللازمة.

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

مراقب

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

نموذج

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

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

رأي

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

يتم تنظيم أي تطبيق ويب مع مراعاة هذه المكونات الأساسية الثلاثة. قد تكون هناك وحدة تحكم أساسية مسؤولة عن تلقي جميع الطلبات واستدعاء وحدة التحكم المحددة لإجراءات محددة. دعونا نفهم بشكل أفضل طريقة عمل تطبيق الويب في ظل بنية MVC باستخدام مثال.

دعونا نرى مثالا

لنأخذ مثالاً لمتجر قرطاسية عبر الإنترنت. يمكن للمستخدم عرض العناصر أو الشراء أو إضافة عناصر إلى سلة التسوق أو إضافة عناصر إلى الطلب الحالي أو حتى إضافة / إزالة العناصر (إذا كان هو المسؤول).
الآن ، دعنا نرى ما سيحدث عندما ينقر المستخدم على العنوان "أقلام" لرؤية قائمة الأقلام.
سيكون لتطبيقنا وحدة تحكم خاصة للتعامل مع جميع الاستفسارات المتعلقة بالأقلام. لنفترض أنه يسمى "pens_controller.php". سيكون لدينا أيضًا نموذجًا سيخزن البيانات المتعلقة بالأقلام التي لدينا - دعنا نسميها "pens_model.php". أخيرًا ، سيكون لدينا عدة طرق عرض لتقديم البيانات - قائمة الأقلام ، وجدول يعرض الأقلام ، وصفحة لتعديل القائمة ، إلخ.
يوضح الشكل التالي التدفق الكامل للتحكم منذ اللحظة التي ينقر فيها المستخدم على "الأقلام" ، حتى يتم عرض النتيجة أمامه:

أولاً ، يتعامل "pens_controller.php" مع طلب المستخدم (1) كطلب GET أو POST. يمكننا أيضًا الحصول على "index.php" وهو وحدة التحكم المركزية التي ستستدعي "pens_controller" عند الحاجة.
ثم تفحص وحدة التحكم الطلب والمعلمات وتستدعي النموذج المطلوب - في هذه الحالة ، "pens_model.php". تطلب وحدة التحكم من النموذج إعادة قائمة الأقلام المتاحة (2).
الآن ، يبحث النموذج في قاعدة البيانات عن المعلومات الضرورية (3) ، ويطبق المنطق إذا لزم الأمر ، ويعيد البيانات إلى وحدة التحكم (4).
ثم يختار المتحكم وجهة النظر المناسبة (5) ويقدم البيانات (6 و 7). إذا جاء الطلب من جهاز محمول باليد ، فسيتم استخدام عرض مناسب له ، أو إذا كان لدى المستخدم سمة معينة محددة ، فسيتم اختيار طريقة العرض الخاصة به - وما إلى ذلك.
كيف تصبح مطور مكدس كامل

مزايا هندسة MVC

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

تنفيذ بسيط لـ MVC باستخدام Java

سيكون لدينا الثلاثة التالية:

    1. StudentObject: النموذج.

    1. StudentView: اعرض الفصل لطباعة التفاصيل على وحدة التحكم.

  1. StudentController: وحدة تحكم تخزن البيانات في studentObject وتقوم بتحديث StudentView وفقًا لذلك

الخطوة 1: قم بإنشاء النموذج

 طالب فئة عامة {
   لفة سلسلة خاصة _
   اسم السلسلة الخاص ؛
   
   سلسلة getRollNo العامة () {
      عودة لفة _
   }
   
   مجموعة باطلة عامة ، رول نو ( سلسلة رول لا ) {
      هذا . rollNo = rollNo ؛
   }
   
   سلسلة عامة getName () {
      اسم العودة _
   }
   
   setName العامة الباطلة ( اسم السلسلة ) {
      هذا . الاسم = الاسم ؛
   }
}

الكود لا يحتاج إلى شرح. وهو يتألف من وظائف للحصول على / تعيين رقم لفة وأسماء الطلاب. دعنا نسميها "student.java".
الخطوة 2: إنشاء طريقة العرض

 طالب الفصل العام _
   printStudentDetails العامة باطلة ( String studentName ، String studentRollNo ) {
      النظام . خارج . println ( "Student:" ) ؛
      النظام . خارج . println ( "الاسم:" + اسم الطالب ) ؛
      النظام . خارج . println ( "Roll No:" + studentRollNo ) ؛
   }
}

هذا ببساطة لطباعة القيم على وحدة التحكم. دعنا نسمي هذا "studentView.java".
الخطوة 3: قم بإنشاء وحدة التحكم

 StudentController من الفصل العام {
   نموذج الطالب الخاص ؛
   عرض StudentView خاص ؛
   StudentController العامة ( نموذج الطالب ، طريقة عرض StudentView ) {
      هذا . نموذج = نموذج ؛
      هذا . عرض = عرض ؛
   }
   setStudentName العامة باطلة ( اسم السلسلة ) {
نموذج . setName ( الاسم ) ؛
   }
   سلسلة عامة getStudentName () {
      نموذج العودة . getName () ،
   }
   مجموعة باطلة عامة StudentRollNo ( String rollNo ) {
نموذج . setRollNo ( rollNo ) ؛
   }
   سلسلة getStudentRollNo العامة () {
      نموذج العودة . getRollNo () ،
   }
   عرض باطل عام () {
رأي . printStudentDetails ( model . getName () ، model . getRollNo ()) ؛
   }
}

أطلق على هذا اسم "StudentController.java". ستخبرك نظرة خاطفة أن وحدة التحكم هذه مسؤولة فقط عن استدعاء النموذج للحصول على / تعيين البيانات ، ثم تحديث العرض.
الآن ، دعونا نلقي نظرة على كيفية ربط كل هذا معًا.
الخطوة 4: قم بإنشاء ملف Java الرئيسي

 فئة عامة MVCPatternDemo {
   العامة الثابتة الفراغ الرئيسي ( سلسلة [] args ) {
      // إحضار سجل الطالب بناءً على رقمه من قاعدة البيانات
      نموذج الطالب = retriveStudentFromDatabase () ،
      // إنشاء طريقة عرض: لكتابة تفاصيل الطالب على وحدة التحكم
      عرض StudentView = عرض StudentView جديد () ؛
      StudentController controller = وحدة تحكم StudentController جديدة ( نموذج ، عرض ) ؛
تحكم . updateView () ؛
      // تحديث بيانات النموذج
تحكم . setStudentName ( "جون" ) ؛
تحكم . updateView () ؛
   }
   استرجاع الطالب الثابت الخاص _
      طالب = طالب جديد ( ) ؛
طالب . setName ( "روبرت" ) ؛
طالب . setRollNo ( "10" ) ؛
      عودة الطالب _
   }
}

وهذا ما يسمى "MVCPatternDemo.java". كما ترى ، يقوم بجلب بيانات الطالب من قاعدة البيانات أو وظيفة (في هذه الحالة نستخدم دالة لتعيين القيم) ويدفعها إلى نموذج الطالب. ثم يقوم بتهيئة العرض الذي أنشأناه سابقًا.
علاوة على ذلك ، يقوم أيضًا بتهيئة وحدة التحكم الخاصة بنا وربطها بالنموذج والعرض. تعد طريقة updateView () جزءًا من وحدة التحكم التي تقوم بتحديث تفاصيل الطالب على وحدة التحكم.
الخطوة 5: اختبر النتيجة
إذا سارت الأمور على ما يرام ، فيجب أن تكون النتيجة:

 طالب علم:
الاسم: روبرت
رقم اللفة: 10
طالب علم:
الاسم: جون
رقم اللفة: 10

إذا حصلت على هذا كإخراج ، فتهانينا! لقد نجحت في تنفيذ بنية MVC باستخدام Java ، وإن كان ذلك لتطبيق بسيط. على الرغم من بساطته ، فإن هذا التطبيق يكفي لإثبات صلاحيات بنية MVC.
15 سؤالاً يجب معرفته في مقابلة Spring MVC

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

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

قم بإسقاط تعليق وأخبرنا كيف تحب هذه المقالة!

كن مطورًا للمكدس الكامل

UpGrad و IIIT-Bangalore's دبلوم PG في تطوير البرمجيات
تقدم الآن للحصول على درجة الماجستير في هندسة البرمجيات