سؤال

لقد استمعت للتو إلى البودكاست السابع عشر لفريق StackOverflow، وقد أشادوا به كثيرًا ASP.NET MVC أنني قررت التحقق من ذلك.

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

هل هناك حقًا إيجابيات كبيرة تجعل الأمر جديرًا بالاهتمام؟

يحرر:إنه ليس مشروعًا قائمًا، إنه مشروع على وشك البدء، لذا إذا كنت سأفعله فيجب أن يكون الآن...


لقد وجدت هذا للتو

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

كيف يعمل ذلك؟لا يوجد عرض؟لا أحداث؟

هل كانت مفيدة؟

المحلول

إذا كنت سعيدًا جدًا باستخدام WebForms اليوم، فربما لا يكون ASP.NET MVC مناسبًا لك.

لقد شعرت بالإحباط من WebForms لفترة طويلة حقًا.أنا بالتأكيد لست وحدي هنا.ينهار تجريد العميل الذكي عبر الويب بشدة في السيناريوهات المعقدة.أنا أحب HTML، وجافا سكريبت، وCSS.يحاول WebForms إخفاء ذلك عني.كما أن لديها بعض الحلول المعقدة حقًا لمشاكل ليست في الحقيقة بهذا التعقيد.من الصعب أيضًا اختبار نماذج الويب بطبيعتها، وعلى الرغم من أنه يمكنك استخدام MVP، إلا أنها ليست حلاً رائعًا لبيئة الويب... (مقارنة بـ MVC).

سوف تناشدك شركة MVC إذا...- تريد المزيد من التحكم في HTML الخاص بك - تريد تجربة Ajax سلسة مثل كل منصة أخرى - تريد قابلية الاختبار من خلال - تريد عناوين URL ذات معنى - الكراهية التعامل مع قضايا Postback و ViewState

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

نصائح أخرى

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

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

لقد استخدمت ASP.NET MVC (حتى أنني كتبت HTTPModule الذي يتيح لك تحديد المسارات في web.config)، وما زلت أشعر بمرارة في فمي حول هذا الموضوع.

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

هذا، وأنا لا أؤيد بدعة "اختبار كل شيء" الحالية...

يسمح لك ASP.NET MVC بشكل أساسي بفصل مسؤولية الأقسام المختلفة من التعليمات البرمجية.وهذا يتيح لك اختبار التطبيق الخاص بك.يمكنك اختبار طرق العرض والطرق وما إلى ذلك.كما أنه يعمل على تسريع التطبيق نظرًا لعدم وجود ViewState أو Postback.

ولكن هناك أيضا عيوب.نظرًا لأنك لا تستخدم WebForms، فلا يمكنك استخدام أي عنصر تحكم ASP.NET.هذا يعني أنه إذا كنت تريد إنشاء GridView، فسوف تقوم بتشغيل حلقة for وإنشاء الجدول يدويًا.إذا كنت تريد استخدام معالج ASP.NET في MVC، فسيتعين عليك إنشاءه بنفسك.

إنه إطار عمل رائع إذا سئمت وتعبت من نموذج ويب ASP.NET وترغب في تنفيذ كل شيء بنفسك.لكن عليك أن تضع في اعتبارك هل ستستفيد من إنشاء كل الأشياء مرة أخرى أم لا؟

بشكل عام أفضّل إطار عمل Webforms نظرًا لمجموعة غنية من عناصر التحكم والسباكة التلقائية.

سأقوم بإنشاء موقع اختبار أولاً، وأرى ما يفكر فيه الفريق، لكن بالنسبة لي لن أعود إلى WebForms بعد استخدام MVC.

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

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

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

MVC في حد ذاته هو نمط التصميم.إذا كان كل ما تبحث عنه هو "فصل الاهتمامات"، فيمكنك بالتأكيد تحقيق ذلك باستخدام نماذج الويب.أنا شخصياً من أشد المعجبين بـ نمط MVP في بيئة n-tier القياسية.

إذا كنت تريد حقًا التحكم الكامل في ترميزك في عالم ASP.NET، فإن إطار العمل MVC هو المناسب لك.

@ خوان مانويل هل سبق لك أن عملت باستخدام لغة ASP الكلاسيكية؟عندما كان عليك برمجة جميع الأحداث الخاصة بك وعناصر "حالة العرض" (مثل القائمة المنسدلة التي تذكر قيمتها المحددة بعد إرسال النموذج)؟

إذا كان الأمر كذلك، فلن يشعر ASP.NET MVC بهذا الأمر المحرج منذ البداية.أود أن أشاهد سلسلة Rob Conery الرائعة "واجهة متجر MVC" حيث كان يسير عبر إطار العمل ويقوم ببناء كل مكون متوقع لموقع واجهة المتجر.إنه أمر مثير للإعجاب حقًا ويسهل متابعته (اللحاق بالركب أمر صعب لأن روب كان نشطًا للغاية ونشر الكثير في تلك السلسلة).

شخصيا، وعلى النقيض تماما من جيف أتوود مشاعر حول الموضوع, لقد أحببت نموذج نموذج الويب.لقد كان الأمر مختلفًا تمامًا عن أيام ASP vbscript/الكلاسيكية بالتأكيد، لكن مراقبة حالة العرض وكتابة عناصر التحكم الملائمة لـ CSS الخاصة بك كان أمرًا ممتعًا في الواقع.

ثم مرة أخرى، لاحظ أنني قلت "أعجبني".يعد ASP.NET MVC رائعًا حقًا ويشبه تقنيات الويب الأخرى المتوفرة.من المؤكد أنه من الأسهل التحول من ASP.NET MVC إلى RAILS إذا كنت ترغب في العمل على منصات متعددة أو تحتاج إليها.وعلى الرغم من أنه، نعم، فهو مستقر للغاية (هذا الموقع بالذات)، إذا كانت شركتك لا تسمح ببرنامج "بيتا" من أي لون؛قد يكون تنفيذه في الإنتاج في هذا الوقت مشكلة.

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

أحد الأشياء الجيدة التي لاحظتها أثناء تصفح العديد من منشورات المدونات ودروس الفيديو أثناء محاولتي تطوير مشروع MVC للحيوانات الأليفة هو أن معظمهم يتبعون أفضل الممارسات الحالية (TDD، وIoC، وDependency حقن، وبدرجة أقل POCO)، بالإضافة إلى الكثير من JQuery لجعل التجربة أكثر إثارة للاهتمام بالنسبة للمستخدم، وهذه هي الأشياء التي يمكنني تطبيقها على تطبيقات نماذج الويب الحالية الخاصة بي، والتي لم أتعرض لها بمثل هذا العمق من قبل.

تختلف طريقة ASP.NET MVC في القيام بالأشياء تمامًا عن نماذج الويب لدرجة أنها ستهز عقلك قليلاً، وهذا أمر جيد جدًا بالنسبة للمطور!

OTOH للمبتدئين تمامًا في تطوير الويب، أعتقد أن MVC هي بالتأكيد بداية أفضل لأنها تقدم نمط تصميم جيد خارج الصندوق وأقرب إلى الطريقة التي تعمل بها الويب حقًا (HTML عديم الحالة، بعد كل شيء).في MVC، عليك أن تقرر كل بايت يتحرك ذهابًا وإيابًا على السلك (على الأقل بينما لا تصاب بالجنون تجاه مساعدي html).بمجرد حصول الشخص على ذلك، سيكون مجهزًا بشكل أفضل للانتقال إلى المرافق "المصطنعة" التي توفرها نماذج ويب ASP.NET وعناصر تحكم الخادم.

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

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

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

أحاول اتخاذ نفس القرار بشأن ASP.NET MVC، خوان مانويل.أنا الآن في انتظار ظهور المشروع الصغير المناسب الذي يمكنني تجربته.إذا سارت التجربة بشكل جيد – حدسي يقول ذلك – فسوف أقوم بتصميم مشاريعي الكبيرة الجديدة حول هذا الإطار.

مع ASP.NET MVC ستفقد نموذج حالة العرض/إعادة النشر لنماذج ويب ASP.NET.وبدون هذا التجريد، فإنك تعمل بشكل أوثق مع أوامر HTML وHTTP POST وGET.أعتقد أن برمجة واجهة المستخدم تتجه إلى حد ما نحو ASP الكلاسيكي.

ومع هذا الإزعاج، تأتي درجة أكبر من السيطرة.لقد وجدت نفسي في كثير من الأحيان أحارب نفايات الجلسات الزائفة لـ ASP.NET ويبدو احتمال استعادة التحكم الكامل في إخراج HTML أمرًا منعشًا للغاية.

ربما يكون إما الأفضل – أو الأسوأ – في كلا العالمين.

لا أعرف ASP.NET MVC، لكني على دراية بنمط MVC.لا أرى طريقة أخرى لإنشاء تطبيقات احترافية بدون MVC.ويجب أن يكون طراز MVC 2، مثل Spring أو Struts.بالمناسبة، كيف كنتم تقومون بإنشاء تطبيقات الويب بدون MVC؟عندما يكون لديك موقف يتطلب نوعًا من التحقق من الصحة ضروريًا في كل طلب، مثل التحقق من صحة المستخدم، ما هو الحل الخاص بك؟هل يوجد نوع من التضمين (validate.aspx) في كل صفحة؟

هل سمعت من قبل عن تطوير N-Tier؟

Ajax، RAD (نماذج الويب التي تحتوي على ajax تكون في كثير من الأحيان مضادة لـ RAD)، التحكم الكامل (دون تطوير مجموعة كاملة من التعليمات البرمجية والدورات).تعد نماذج الويب جيدة فقط لربط بعض الشبكات وما إلى ذلك وليس لأي شيء آخر، وهناك شيء آخر مهم حقًا وهو الأداء.عندما تتعثر في نماذج الويب، فسوف تقوم بتشغيل MVC عاجلاً أم آجلاً.

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

مهما فعلت، تأكد من توثيقه.ربما إذا كنت تستخدم مشروعًا تجريبيًا، فاكتب تقريرًا بعد الوفاة للرجوع إليه في المستقبل.

لا أعرف ASP.NET MVC، لكني على دراية بنمط MVC.لا أرى طريقة أخرى لإنشاء تطبيقات احترافية بدون MVC.ويجب أن يكون طراز MVC 2، مثل Spring أو Struts.بالمناسبة، كيف كنتم تقومون بإنشاء تطبيقات الويب بدون MVC؟عندما يكون لديك موقف يتطلب نوعًا من التحقق من الصحة ضروريًا في كل طلب، مثل التحقق من صحة المستخدم، ما هو الحل الخاص بك؟هل يوجد نوع من التضمين (validate.aspx) في كل صفحة؟

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

هل حقيقة أن ASP.net MVC موجود فقط في "Preview 5" هي سبب للقلق عند النظر فيه؟

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

إذا كنت ميتًا على استخدام إطار عمل MVC، فأنا أفضل استخدام إطار عمل مشروع Castle...

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

MVC ليس رصاصة فضية، وخاصة Microsoft MVC...

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

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

لقد رأيت كثيرًا أشخاصًا يسيئون استخدام إعادة النشر وحالة العرض ويلقون اللوم على نموذج ASP .NET.

تذكر أن أفضل صفحات الويب لا تزال هي ملفات .HTML، وهنا تكمن قوة ASP .NET MVC.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top