سؤال

مازلت أسمع عن مبدأ DRY ومدى أهميته في ASP.NET MVC، ولكن عندما أقوم بالبحث على Google يبدو أنني لا أفهم تمامًا كيفية تطبيقه على MVC.

مما قرأته ليس حقًا رائحة كود النسخ واللصق، كما اعتقدت، ولكنه أكثر من ذلك.

هل يمكن لأي منكم أن يقدم بعض الأفكار حول كيفية استخدام مبدأ DRY في تطبيق ASP.NET MVC الخاص بي؟

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

المحلول

  • استخدام سمات التصفية لإدارة الجوانب (المصادقة، والتنقل، ومسارات التنقل، وما إلى ذلك)
  • إستخدم الطبقة الفائقة وحدة التحكم (قم بتطبيق عوامل التصفية الشائعة على مستوى وحدة التحكم عليها، انظر mvccontrib على سبيل المثال)
  • كتابة نتائج الإجراءات المخصصة (مثل في مفككونتريب - على سبيل المثال، قمنا بإنشاء واحدة تسمى logoutresult والتي تقوم فقط بـ FormsAuthentication.Logout()
  • استخدم اصطلاحًا لأسماء العرض
  • الأهم من ذلك - الحفاظ على إجراءات التحكم الخاصة بك أحمق, ، ابحث عن فرص إعادة الاستخدام في الخدمات

نصائح أخرى

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

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

  • في C++ Templating يمنع نسخ متعددة من نفس الوظيفة.
  • في C void * يمكن استخدام المؤشرات بطريقة مماثلة، ولكن بحذر شديد.
  • تسمح الوراثة من وظيفة أخرى للوظيفة بالسماح للوظائف الأخرى باستخدام نفس قاعدة التعليمات البرمجية دون الحاجة إلى نسخ التعليمات البرمجية.
  • تعمل تسوية البيانات في قاعدة البيانات على تقليل البيانات الزائدة عن الحاجة.الالتزام أيضًا بمبدأ DRY.

عندما تستعرض "فكرة" في مشروع ما.اسال نفسك.

  1. هل كتبت بالفعل هذا الرمز؟
  2. هل سيكون هذا الرمز مفيدًا في مكان آخر؟
  3. هل يمكنني حفظ الترميز من خلال البناء على فئة/وظيفة سابقة.

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

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

وينبغي DRY ليس فقط أن يطبق إلى رمز، ولكن على المعلومات بشكل عام. هل تكرار الأشياء في نظام البناء الخاص بك؟ هل لديك البيانات التي يجب أن يتم نقل إلى ملف التكوين المشترك، وما إلى ذلك.

حسنا، والمثال الأكثر شيوعا التي أستطيع أن أعطي حول DRY وUI تستخدم أشياء مثل MasterPages وUserControls.

وMasterPages ضمان أن كنت قد كتبت كل HTML ثابتة مرة واحدة فقط.

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

وDRY أهمية خاصة في MVC بسبب الزيادة في عدد الهائل من الملفات لإنجاز نفس المهمة.

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

والطبقات المجال نموذج: الحساب، الأصول، PurchaseOrder

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

والصفوف (tuple) / Dictonary / خريطة قد تعين حساب، الأصول والحالات PurchaseOrder واحدة ولكن جدول قد يكون مفيدا لمجموعة منهم الخ لا يزال لديك MVC ولكن لديك بيانات الدورة، ليست مستعدة لصفقة بعد في وجهة نظر نموذج دون الحاجة بالضرورة أنه ينتهك قواعد نموذج المجال الذي هو فيه يجب ان تذهب القواعد. وسوف تكون أقل فقر الدم ونموذج مضاد بهذه الطريقة. يمكنك تمرير هذه القواعد في خط الهجوم واستخدامها هناك أو فقط في الظهر أو على حد سواء اعتمادا على كيفية يقرأ نظام من العملاء وغيرها.

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