提问人:Brian Lyttle 提问时间:8/26/2008 最后编辑:OliBrian Lyttle 更新时间:11/18/2010 访问量:2745
紧凑框架 - 是否有可用的 MVC 框架/库?
Compact Framework - Is there an MVC framework/library available?
问:
我找到了一位 Microsoft 员工关于这个主题的文章,但有没有人为此实施了更强大的框架?是否有可以轻松移植的 WinForms 轻量级框架?我想相当快地跟上速度,并避免在更聪明的人已经这样做时生成自己的框架/库来处理这个问题。
我没有看过P&P集团的Mobile Software Factory,但我怀疑它有点沉重。值得一看吗?
编辑:我不是在寻找有关 ASP.NET MVC项目的信息。我问的是紧凑框架“WinForms”的实现,以及如何用它来实现 MVC。
答:
编辑:以上海报是正确的。我看到 MVC 后立即想到了 Web 表单。我很抱歉。随意忽略这一点。我会保留我的原始消息,以防万一任何对 Web 表单 MVC 感兴趣的人需要这些链接。:-)
市面上有几个 MVC 框架,它们都不是很“轻量级”的,但 MVC 与 Web 表单相比是一个相当大的转变,所以这是意料之中的:
- ASP.NET MVC - 这是Microsoft对 MVC 框架的尝试。它仍处于预览模式,因此请自行决定是否使用它,但有几个人已经在他们的生产应用程序中使用它。通过简单的 Google 搜索,您将找到大量相关文档,因为它在 .NET 人群中变得非常流行。
- Castle MonoRail - MonoRail 框架是一个开源 MVC 框架,已经存在了很长一段时间,并在多个生产应用程序上使用。它肯定比 ASP.NET MVC 框架更出色,但考虑到Microsoft在他们的 MVC 产品上投入了大量精力,我认为很快就会改变。
你们俩(davidg 和 Kevin Pang)都没有注意到他对 WinForms 感兴趣,而不是 Web Forms。他想要一个框架,该框架在使用 .NET Compact Framework 的 WinForms 项目中推送模型-视图-控制器设计模式(davidg,MVC 不仅仅是 ASP.NET 框架的名称)。他问了他的问题。
@DavidG和@KevenPang
MVC 并不局限于 Web 技术,事实上最初的 smalltalk MVC 是针对桌面应用程序的。
它的工作原理如下:
- 视图 = 客户端窗体
- 控制器 = 封装客户端事件,并在视图和模型之间封送
- 模型 = 应用程序数据和业务逻辑
在纯 Smalltalk MVC 中,View 并不局限于一种形式,而是可以是模型数据的任何表示形式......例如,如果我们有一个表示电子表格的模型,我们可以有以下视图:
- 电子表格视图
- 打印机友好视图
- 图标视图
等等,模型将是相同的,但视图在每种情况下都会创建不同的输出对象。
综上所述,我不知道 .NET Compact 框架是否存在这样的框架,我只是想指出 MVC 并不意味着 WebApp。
我个人认为移动软件工厂对 CF 来说并不是什么好事。 我们仍然在工作中使用它的一部分(EventBroker),如果可能的话,我什至想删除该部分(因为它不支持泛型事件,您必须从 EventArgs 将参数转换为它们的强类型)。工作中的一个姊妹项目将它用于部分 UI,但由于性能问题而不得不将其删除(另一个大项目,尽管它本身也有额外的性能问题)。
我发现 P&P 库提供的 MVP 框架的问题是 Forms 和 Controls 拥有演示者,而不是拥有 Forms 的演示者/控制器(谁没有读过“这只是一个视图”:务实的程序员? 这与 MS 的“Form First”快速应用程序开发口号非常吻合,但当您考虑到 CE 中的 Windows 句柄有多昂贵时(如果您有很多的话),这很糟糕。 我们在工作中运行了一个非常大的 CF 应用程序,并且我们已经推出了自己的 MVC 框架。推出自己的并不难,只需确保将所有内容分离到控制器、视图、业务对象和服务中,并有一个 UIController 来控制控制器之间的交互。
实际上,我们更进一步,通过使用 Controller->View->Layout 模式重用窗体/控件。 控制器与往常相同,视图是将布局自定义为特定视图的对象,布局是实际的 UserControl。然后,我们将这些内容换入和换出一个表单。这大大减少了我们使用的 Windows 控件的数量。 这 + 在启动时初始化所有窗体意味着我们消除了在“按需”创建新的 Windows 控件时出现的明显停顿。
显然,只有当你滚动一个大型应用程序时,做这种事情才真正值得。我们大约有 20 + 不同类型的视图,总共使用大约 7 种不同的布局。这会对我们的初始化例程(当我们在启动时加载表单时)造成大约 10 秒的伤害,但从心理上讲,大多数用户愿意在启动时接受这样的打击,而不是在运行时出现明显的停顿。
在我的书中,P&P库的主要问题是它是一个FF -> CF端口,并且由于两个平台之间的某些不兼容性和性能差异,您丢失了很多有用的功能。
顺便说一句,这是迄今为止我读过的最全面的关于 MVC/MVP 的文章。 对于 Windows 应用程序(桌面或 CE),我建议使用 Taligent Model-View-Presenter 版本,而无需交互、命令和选择(例如,控制器/演示者执行所有工作)。
评论
看看mFly的移动MVC。我从未使用过它,但它被宣传为 CF 的合理 MVC 框架。
@davidg:“为什么需要 Compact Framework 上的 MVC?
为什么不呢?这并不是说它是为 Web 开发保留的,而是一种模式。
还有OpenNETCF IoC框架(我认为在提出这个问题时并不存在),它要轻得多,但在对象模型上与P&P的移动软件工厂相似。
评论