Интеллектуальный интерфейс (God object) неизбежен при использовании дизайнера WinForms?

Оставиваю мелкими шажочками WinForms) Не мог не заметить, что если использовать для создания формы только дизайнер, то возникает нечто похожее на антипаттерн Интеллектуальный интерфейс (God object), т.к. файл с кодом формы и файл дизайнера - это partial-классы, т.е. по сути один класс, просто поделенный на два файла. Хотелось бы послушать мнения на этот счет. Также хотелось бы узнать, если я прав в первом вопросе, то как не допустить подобной ситуации в проекте? Заранее спасибо!


Ответы (1 шт):

Автор решения: James Bond

Такой риск действительно существует, и при использовании дизайнера для создания формы можно столкнуться с антипаттерном "Интеллектуальный интерфейс". Поскольку файлы формы и дизайнера — это два фрагмента одного partial-класса, который может содержать как логику управления интерфейсом, так и логику обработки данных, всё это может привести к излишней перегруженности формы. Хотя, строго говоря, для получения настоящего "интеллектуального интерфейса" нужно очень постараться, т.к. код, определяющий внешний вид формы, отделен от кода, определяющего ее поведение.

Чтобы избежать такой ситуации стоит чётко отделять логику приложения от представления (UI), например с помощью выбора подходящего для сложности проекта паттерна - например, MVP, MVC, или еще более простые, допускающие всего два слоя в программе. Логику работы с данными нужно вынести в отдельные классы, сделав их независимыми от представления (критерий оценки - возможно ли заменить один фрейворк для GUI на другой без затрагивания логики), остальное же будет зависеть от выбранного паттерна, т.к. некоторые допускают ситуацию, при которой Контроллер (или Презентер) являются частью Представления, а некоторые требуют явно их разделять.

→ Ссылка