Как вернуться к чистому коду интерфейса пользователя? - PullRequest
0 голосов
/ 22 декабря 2009

Я работаю над проектом winforms, содержащим некоторые формы и элементы управления. Каждый переводится на 4 языка. Есть одна форма, называемая «PropertiesForm», которую нужно поддерживать: это контейнер вкладок с 6 страницами вкладок и более чем сотней элементов управления, с грязным кодом, пытающимся (и часто не выполняющим) сохранять целостность всего объекта.

Так как я отвечаю за этот проект, я старался избегать больших модификаций этой формы, но это больше невозможно. Внесение больших изменений будет трудным и медленным, и может вызвать проблемы со стабильностью. Итак, каков наилучший способ восстановить чистый и понятный код?

Моя идея - создать хотя бы один элемент управления для каждой вкладки и синхронизировать их в форме. Моя проблема в том, что я не знаю простого способа сделать это с помощью Visual Studio. Есть ли автоматический способ сохранить переводчики и обработчики событий в новых элементах управления, поскольку копирование-вставка заставляет их исчезать? Есть ли какой-либо инструмент или надстройка, предназначенная для этой задачи?

Каким должен быть метод, чтобы очистить конструкцию, не ломая все?

Ответы [ 3 ]

1 голос
/ 22 декабря 2009

Насколько я знаю, такого инструмента нет, и я не понимаю, по какому принципу он должен существовать.

Я бы просто создал 6 пользовательских элементов управления, обрезал элементы управления на каждой вкладке в соответствующем элементе управления и вставил их во вновь созданные элементы управления. После этого исправьте все ошибки, отправив функции с ошибками в соответствующие пользовательские элементы управления. Однако, если элементы управления вкладками связаны друг с другом на разных вкладках, вы можете столкнуться с некоторыми «проблемами».

Другой подход заключается в логическом разделении пользовательских элементов управления (элементов управления датой / временем, текстовых элементов управления, элементов управления, зависящих от объекта).

Однако я боюсь, что обработчики событий и другие вещи, которые вам нужно будет исправить самостоятельно.

1 голос
/ 22 декабря 2009

Вы уже знаете, что не так и как это исправить: разбейте все на маленькие, слабо связанные компоненты и заставьте форму работать вместе.

Взгляните на модель-представление-контроллер . Может быть, это хорошая идея сделать отдельный контроллер для каждого компонента, и тогда у большой формы есть свой собственный контроллер, который контролирует меньшие. Это будет важно для достойной обработки событий: не подключайте события управления, а скорее события контроллера.

0 голосов
/ 22 декабря 2009

такая модификация, вероятно, должна быть сделана в коде, а не в редакторе дизайна. Вы сами говорите, что копирование-вставка начинает ломать вещи: редактор дизайна предназначен для создания дизайна / макета, но он не очень подходит для обработки кода.

Я бы посоветовал вам разбить 6 вкладок на 6 разных файлов и 1 файл для фактической формы. Затем быстро просмотрите код и посмотрите, сможете ли вы найти общие шаблоны, функциональные или логические (т. Е. Определенные группы элементов управления, которые, кажется, появляются вновь, или определенные структуры кода, которые часто используются). Распакуйте их, поместите в отдельные классы и примените в исходных файлах. Типичным примером может быть элемент управления, к которому применен определенный стиль и который используется несколько раз: для этого должен быть выделен класс / функция, управляющая стилем.

Тем временем документируйте свои шаги и продолжайте тестировать функциональность.

Также очень важно (вы не говорите об этом в своем вопросе, но, вероятно, он есть), как вы получаете данные из / в базовую структуру данных / базу данных / файл. Может быть, вам даже стоит начать с этого: обеспечить выделенный стандартизированный для вашего приложения способ обработки обмена данными и пользовательским интерфейсом и заставить его использовать все элементы управления. Вы знаете, что сделали все правильно, если вам не нужно менять логику связи, если вы решите провести рефакторинг либо интерфейса, базы данных, либо обоих.

...