在 Web 上的 MVC 应用程序中,很容易在视图和控制器之间划清界限——视图向用户显示数据,而控制器收集输入并根据提供的输入将用户路由到视图。但是在有状态(例如桌面)应用程序中,要知道在哪里划界有点困难,因为操作之间的界限不像 Web 应用程序那样清晰。那么我在哪里画线呢?
例如,我的应用程序中有一个视图,它允许用户将项目放置在网格上。现在我在视图本身中有“在网格上放置项目”代码(访问网格模型以进行实际放置)。但我也可以将它放在控制器中,并将必要的信息从视图传递给控制器。两者似乎都不是一个明确的选择 - 将代码放在视图中最终会使视图膨胀,因为用户可以执行大量操作,而不仅仅是放置项目;但是将它放在控制器中似乎只是额外的间接级别,使代码更难遵循。
还是我对这一切都错了?这是一个 WinForms 应用程序;我的“视图”实际上是一个表单,表单本身既可以接收输入,也可以显示信息。那么区分就没有意义了吗?或者我应该让视图与表单分开吗?还是 MVC 模式与 WinForms 完全不兼容?