.net 将视图层与现有winforms应用程序分离的路径?
鉴于:.net 将视图层与现有winforms应用程序分离的路径?,.net,winforms,design-patterns,mvvm,separation-of-concerns,.net,Winforms,Design Patterns,Mvvm,Separation Of Concerns,鉴于: 我们的组织有一个标准的windows窗体应用程序 表单和业务逻辑是交织在一起的,即。我们知道,自治视图模式使得编写单元测试非常困难。我们的目标是采用单个表单,并将表示逻辑与表单本身分离,这样我们就有了一个独立的域实体/对象,可以更容易地针对它编写单元测试 我们没有完全重写。我正在寻找一种渐进的方法,允许单独处理一个屏幕 经过一些研究,我认为这种模式最适合这个组织做事的方式 该组织通常倾向于较少的间接层,因此更简单(尽管不太健壮)更好 从过去到将来的转变应该是公式化的(对于任何已经熟悉内部
最后,你知道一个好的在线代码示例可以帮助我充实原型吗?在WPF中,我们可以在视图中的对象和ViewModel中的内容之间进行数据绑定,因为MVVM是WPF的完美模式 我从这个例子中学到了MVVM:
这是一个Windows Phone教程,但如果您了解它的工作原理,您可以轻松地将其用于任何WPF应用程序。在WPF中,我们可以在视图中的对象和ViewModel中的内容之间进行数据绑定,因为MVVM是WPF的完美模式 我从这个例子中学到了MVVM:
这是一个Windows Phone教程,但如果您能理解它的工作原理,您可以轻松地将其用于任何WPF应用程序。也许您最好的方法是用眼睛查看代码库,以了解其功能。自治视图(以及培育它的winforms)如此难以测试的一个主要原因是,开发人员倾向于将所有内容都集中在一个事件处理程序中 以这个问题为例,它是关于MVC3的,但它是一个完全混乱的方法——一个负责配置gridview、配置响应和检索数据以填充gridview的方法。甚至很难知道从哪里开始回答这个问题,更不用说编写任何合理的(阅读:简明&快速执行)测试来确保解决方案有效 如果您能够仔细阅读您的代码,并仔细地将所有业务逻辑和/或集成点封装到服务/组件/接口(和实现)中,最好在外部单独的程序集中 一旦您将所有逻辑分解为单独的组件,每个组件都专注于自己的组件,那么您就可以编写测试,以确保它们执行预期的任务,而不必测试应用程序的任何其他部分,这些将是您的服务。您希望每个服务类型都是一个由实现支持的接口 在编写和测试了所有这些不同的项目和程序集之后,可以使用(一种形式的)将它们重新引入到应用程序中。这进一步将UI与应用程序要执行的各种业务逻辑分离。这里的梦想是,当您准备重写UI时,可以重用已经编写和测试过的业务逻辑组件 我认为winform类将有一个接受许多参数的构造函数(上面讨论的各种服务的混合)。DI框架将负责向winform类提供服务。在这之后,理想情况下,winforms事件处理程序将相对较小,只需使用从各种表单字段收集的参数值调用服务方法 下面是一篇关于在winforms中使用(依赖项注入框架)的文章:。有很多不同的DI框架,我使用Castle Windsor,因为这是我第一次学习的,它们基本上都做相同的事情,所以,你需要做的就是找到一个你熟悉的框架 这是一个基于web应用程序的应用程序,但对于如何从现有的“厨房水槽”应用程序中识别和重构服务应该具有指导意义 这个答案正在变成一本书,而且非常抽象。最重要的是,您需要将应用程序视为一组乐高积木,将它们组合在一起以产生功能(每个积木都是一个问题),而UI只是将积木粘合在一起的粘合剂(这种类比并不完美)
事实上,它更像是艺术而不是科学,但你可以训练你的思维以这种方式看待问题,一旦你这样做了,编程通常会变得容易得多。这条曲线有点陡峭,但是,坚持下去,你就会到达那里。也许你能做的最好的事情就是用眼睛观察代码库。自治视图(以及培育它的winforms)如此难以测试的一个主要原因是,开发人员倾向于将所有内容都集中在一个事件处理程序中 以这个问题为例,它是关于MVC3的,但它是一个完全混乱的方法——一个负责配置gridview、配置响应和检索数据以填充