سؤال

في نماذج Windows ، C#، .NET 3.5 ، VS2008 ...

ما هي الطريقة الجيدة لعزل الكود لـ Menustrip (أو أي مجموعة تحكم معقدة) ، وهي عناصر قائمة الأطفال ، من بقية النموذج الخاص بي؟

على سبيل المثال ، عندما يكون لديّ menustrip مع عدد من القوائم ، تحتوي كل قائمة على عدد من عناصر القائمة ، والتي تنقر جميعها على أحداث ، يتم نقض طن من التعليمات البرمجية في ملف Form.desinger.cs وأيضًا form.cs ملف. هذا لا يسبب أي مشاكل من الناحية الفنية ، ولكنه من الخطأ أن يكون هناك الكثير من الأشياء التي تم إلقاؤها في مكان واحد (إلى جانب كل شيء آخر في النموذج).

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

وفقًا لمقاييس الكود ، ينتهك النموذج أفضل الممارسات:

  1. الكثير من اقتران الطبقة
  2. العديد من خطوط التعليمات البرمجية
  3. إجمالي الصيانة المنخفضة

الحلول الممكنة لعزل menustrip عن بقية النموذج:

  1. قم بتثبيته في UserControl
  2. أفكار أخرى؟
هل كانت مفيدة؟

المحلول

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

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

نصائح أخرى

هل يمكنك تعطيل أو تصفية Codemetrics من الاستيلاء على *.designer.cs ، على سبيل المثال؟

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

لتقليل الكود المنسج في ملف form.cs ، فكر في المزيد من نهج MVC ، بحيث عندما ينشئ المصمم ، قل private void button1_Click الطريقة ، يمكنك تجريد بعض منطق العمل لطرق أخرى من الفصول الأخرى. لذا بدلاً من تحريك جميع ملفاتك ، button1_Click سوف يتصل InitiateMoveFileMethod( string source, string destination ), ، فمثلا.

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