Если вы используете компоненты макета в Winforms, этот может быть приемлемым подходом, хотя я думаю, что отличает Интернет и Windows Forms (примечание: НЕ WPF!), Что в первом вы делаете много «композитинга», поэтому концепция UserControl так полезна, в то время как в последнем вы работаете с очень сложными элементами управления (например, от третьего лица - в моем последнем выступлении мы использовали невероятный контроль сетки через небольшую компанию под названием Infralution )
Основная проблема, которую я вижу, связана с макетами, поскольку модель рендеринга немного отличается от веб-интерфейса. Я ничего не знаю о вашем приложении, но если оно «работает», это то, что наиболее важно. Я предполагаю, что в этом случае вы используете такие вещи, как FlowLayoutPanel и TableLayoutPanel должным образом.
Если вы хотите пойти по более каноническому пути, обратите внимание не только на создание компонентов, но и на то, как вы можете использовать модель наследования для более надежной компоновки вашего приложения - имея базовый класс Form, в котором есть контейнеры для ваших " Компоненты типа «UserControl» идут, а затем используют какое-то внедрение интерфейса зависимости, чтобы поменять их во время работы приложения.
Наконец, взгляните на некоторые из приложений Windows Forms с открытым исходным кодом, чтобы убедиться, что вы не слишком усердны в себе, поскольку общий интерфейс и повторно используемые компоненты - это цель в каждом приложении. Несмотря на то, что я всегда думал, что материал Microsoft Patterns & Practices балансирует на раздутость, есть несколько хороших идей, и вам следует изучить некоторые подходы Составного блока прикладного интерфейса , которые они выпустили.
Хорошо, не наконец, я хотел бы добавить еще одну вещь: внимательно взглянуть на WPF, который вернет многие концепции из ваших дней веб-разработки и даст вам такую мощь на рабочем столе. применение.