Выделение бенформы Menustrip для повышения ремонтопригодности кода
-
30-09-2019 - |
Вопрос
В формах Windows, C #, .NET 3.5, VS2008 ...
Какой хороший способ изолировать код для меню (или любой сложной контрольной группы), и это элементы дочернего меню, от остальной части моей формы?
Например, когда у меня есть мерутраф с несколькими меню, и каждое меню есть ряд пунктов меню, которые все имеют клики событий, то тонна кода известена как файл form.desinger.cs, а также форма .CS файл. Это не вызывает никаких проблем технически, но просто чувствует себя неправильно иметь столько всего, что все сброшено в одном месте (вместе со всем остальным в форме).
Запуск метрик кода на весь мой проект, форма попадает в качестве наихудшего индекса ремонтопригодности любого файла проекта. Обычно я не буду слишком догматично послушниму направлению инструмента метрики кода, но в этом случае я полностью согласен.
Согласно метрикам кода, форма нарушает эти лучшие практики:
- Слишком много классной муфты
- Слишком много строк кода
- Общая низкая ремонтопригодность
Возможные решения для изоляции метро от остальной части вида:
- Наполните его в усердно
- Другие идеи?
Решение
Я думаю, что вы должны позаботиться о изолирующем бизнес-логике из логики презентации, например, не помещают слишком много кода в обработчиках или командам реализации элементов меню.
Убедитесь, что ваши метрики кода не касаются сгенерированного кода или не обращают внимания на плохие метрики в автогенерированном коде.
Другие советы
Можете ли вы отключить или отфильтровать вашу кодометрию от Grabbing * .designer.cs, например,?
Если нет, я бы использовал заводский класс, чтобы вы могли создавать эти структуры в одной строке. Сверху вниз к этому, состоит в том, что она снижает функциональность дизайнера. На заводе вы можете назвать каждый компонент на основе шаблона String + «_filemenu», например, чтобы вы могли установить базовое «имя» в заводском конструкторе.
Чтобы уменьшить код SPEW в вашем файле form.cs, рассмотрите больше подходов MVC, чтобы при генерировании дизайнера, скажем private void button1_Click
Способ, вы абстрактные бизнес-логики для других методов других классов. Поэтому вместо перемещения всех ваших файлов, button1_Click
позвоню InitiateMoveFileMethod( string source, string destination )
, Например.