WinForms MenuStrip Isolation для улучшения сопровождения кода - PullRequest
1 голос
/ 25 июня 2010

В Windows Forms, C #, .NET 3.5, VS2008 ...

Какой хороший способ изолировать код для MenuStrip (или любой сложной контрольной группы) и его дочерних элементов меню от остальной части моей формы?

Например, когда у меня есть MenuStrip с несколькими меню, и у каждого меню есть несколько пунктов меню, каждый из которых имеет события щелчка, тонна кода выливается как в файл Form.Desinger.cs, так и в Файл Form.cs Технически это не вызывает каких-либо проблем, но просто кажется неправильным, что столько всего материала сбрасывается в одном месте (вместе со всем остальным в форме).

Запуская метрики кода для всего моего проекта, форма помечается как имеющая худший индекс ремонтопригодности среди всех файлов проекта. Как правило, я не буду слишком догматичен в отношении направления инструмента Code Metrics, но в этом случае я полностью согласен.

Согласно Code Metrics, форма нарушает следующие рекомендации:

  1. Слишком много класса сцепления
  2. Слишком много строк кода
  3. Общая низкая ремонтопригодность

Возможные решения для изоляции MenuStrip от остальной части формы:

  1. Заполнить его в UserControl
  2. Другие идеи?

Ответы [ 2 ]

0 голосов
/ 26 июня 2010

Можете ли вы отключить или отфильтровать, например, ваш CodeMetrics от * .Designer.cs?

Если нет, я бы использовал класс Factory, чтобы вы могли создавать эти структуры в одной строке.Недостатком этого является то, что он уменьшает функциональность конструктора.На фабрике вы можете назвать каждый компонент, например, на основе строки шаблона + "_FileMenu", чтобы можно было установить базовое "имя" в конструкторе Factory.

Чтобы уменьшить выброс кода в вашей формеВ файле .cs рассмотрим больше подхода MVC, так что когда дизайнер генерирует, скажем, метод private void button1_Click, вы абстрагируете некоторую бизнес-логику от других методов других классов.Таким образом, вместо перемещения всех ваших файлов, button1_Click будет вызывать, например, InitiateMoveFileMethod( string source, string destination ).

0 голосов
/ 25 июня 2010

Я думаю, вы должны позаботиться об изоляции бизнес-логики от логики представления, например, не помещайте слишком много кода в обработчики кликов или не выполняйте команды для элементов меню.

Убедитесь, что ваши показатели кода не касаются сгенерированныхкод или не обращайте внимания на плохие метрики в сгенерированном коде.

...