Я запустил проект WinForms несколько недель назад и, поскольку я не знал, какие именно функции мне нужны, я просто добавил их по пути. Это теперь вызвало ужасную неразбериху, где моя MainForm представляет собой большой шарик грязи и где, например, некоторые важные изменения состояния инициируются элементами пользовательского интерфейса до такой степени, что мне приходится вызывать событие OnChange элемента управления, чтобы изменить какое-либо состояние в базе данных. .
Короче говоря: я только начал новый проект, в котором я хочу использовать лучший подход. Я просто не знаю, какой из них будет «хорошим». В ASP.net MVC я нашел шаблон MVVM действительно полезным, но на рабочем столе MVVM, кажется, предназначен только для WPF, а не для WinForms.
Другой подход - это трехуровневая архитектура: у меня есть мой Database-Class, который в настоящее время напрямую взаимодействует с пользовательским интерфейсом. Теперь я создаю новый статический класс («ApplicationState»), который обращается к базе данных и запускает события, чтобы сообщить пользовательскому интерфейсу «Эй, что-то изменилось!». Пользовательский интерфейс будет управлять состоянием, которое затем будет обрабатывать постоянство базы данных и снова вызывать события, если пользовательский интерфейс нуждается в обновлении. Дело в том, что класс ApplicationState никогда не изменяет интерфейс напрямую, а подписывается на события. Это выглядит как чистый / "MVC-й" способ сделать это, но, может быть, я здесь что-то упускаю?
По сути, моей конечной целью было бы сделать пользовательский интерфейс полностью независимым от уровня базы данных, чтобы быть уверенным, что я не подключу бизнес-логику к пользовательскому интерфейсу снова.