WPF:如果 Carlsberg 做了 MVVM 框架:第 6 部分(共 n 部分)





5.00/5 (42投票s)
大概会是 Cinch,一个用于 WPF 的 MVVM 框架。
目录
Cinch 文章系列链接
- Cinch入门文章
- Cinch 及其内部结构演练 I
- Cinch 及其内部结构演练 II
- 如何使用Cinch开发ViewModels
- 如何使用 Cinch 进行 ViewModel 的单元测试,包括如何测试 Cinch ViewModel 中可能运行的后台工作线程。
- 使用Cinch的演示应用程序
介绍
上次,我们开始研究使用 Cinch 进行单元测试。在本文中,我将探讨以下内容:
先决条件
演示应用程序使用了
- VS2008 SP1
- .NET 3.5 SP1
- SQL Server(请参阅 MVVM.DataAccess 项目中的 README.txt 文件,了解演示应用程序数据库的设置要求)
特别鸣谢
我想唯一的方法就是开始,那么我们开始吧,好吗?但在我们开始之前,我只需要重复一下特别感谢部分,并增加一位:Paul Stovell,我上次忘了把他包括进来。
在开始之前,我想特别感谢以下各位,没有他们,本文及后续一系列文章将不可能实现。基本上,我研究了这些人的 Cinch 作品,看到了什么好,什么不好,然后创建了 Cinch。我希望 Cinch 能填补其他框架未涵盖的一些新领域。
- Mark Smith(Julmar Technology),感谢他出色的 MVVM 辅助库,它极大地帮助了我。Mark,我知道我已经征得了你使用部分代码的许可,你非常慷慨地同意了,但我还是想再次感谢你那些很棒的想法,其中一些我确实从未想到过。我非常佩服你,伙计。
- Josh Smith / Marlon Grech(作为一个整体)他们出色的中介者实现。你们俩太棒了,一直都很愉快。
- Karl Shifflett / Jaime Rodriguez(微软的哥们)他们出色的 MVVM Lob 游览,我参加了,干得好,伙计们。
- Bill Kempf,感谢他一直以来的表现,以及他是一位疯狂的程序员大师,他也拥有一个很棒的 MVVM 框架,名为 Onyx,我曾在一段时间前写过一篇关于它的 文章。Bill 总是能解答难题,谢谢 Bill。
- Paul Stovell 他出色的 委派验证想法,Cinch 使用它来验证业务对象。
- 所有 WPF Disciples 的成员,在我看来,是最好的在线社区。
谢谢你们,伙计/女孩,你们懂的。
演示应用程序
从某些方面来说,本文会有些奇怪,因为我已经涵盖了构建演示应用程序或任何其他基于 MVVM 的应用程序(当然,使用 Cinch 框架)所需了解的所有知识,所以我不会在本文中涵盖任何代码,我认为这些内容在之前的文章中已经讲得很清楚了。
本文将侧重于演示应用程序的外观及其构成;当然,在这样做的同时,我将解释 Cinch 的某些类/对象是如何以及为何被使用,以及为什么遵循某些设计理念,但如果你期望进行完整的代码演练,那么本文不适合,你应该参考之前的文章。
我希望到目前为止,你已经掌握了足够的 Cinch 知识,可以自己拆解演示应用程序并了解其运作方式。请记住,在本文之前的所有 Cinch 文章都能帮助你。
它的外观
到目前为止,我已经写了五篇关于 Cinch 的文章,信不信由你,其中竟然没有一张演示应用程序的截图,这很大程度上是因为我一直在解释框架以及如何进行测试,而本文讨论的是演示应用程序的外观和结构,所以话不多说,我们需要看一些截图。让我们来看看一些截图,好吗?
开始页面
添加/编辑客户(下图显示添加新模式)
添加/编辑客户(下图显示在编辑客户订单过程中)
搜索客户
它是如何制作的
演示应用程序背后的基本思想非常简单。以下功能点解释了它的工作原理:
- UI 将是一个带有标签的界面,最初会加载一个开始页面。
- UI 应支持从开始页面和菜单项创建新客户。在这两种情况下,都应打开一个新的选项卡,除非已经打开了一个“添加/编辑客户”选项卡,这是一个我为展示如何使用 Mediator 和 Workspaces 而人为设置的愚蠢限制。
- UI 应支持从开始页面和菜单项搜索客户。在这两种情况下,都应打开一个新的选项卡,除非已经打开了一个“搜索客户”选项卡,这是一个我为展示如何使用 Mediator 和 Workspaces 而人为设置的愚蠢限制。
- 应有可能从搜索结果中编辑现有客户,除非“添加/编辑客户”选项卡已打开。
- 应有可能从搜索结果中删除现有客户,除非所选客户已在“添加/编辑客户”选项卡中打开。
- 应有可能从“添加/编辑客户”选项卡添加新客户,并使用“添加/编辑客户”选项卡上的错误样式文本框查看任何错误。
- 应有可能从搜索结果中打开现有客户(并开始编辑客户),然后取消编辑,这不仅应取消对客户的编辑,还应关闭“添加/编辑客户”选项卡。
- 应有可能通过弹出窗口向现有客户添加订单,并使用“添加/编辑订单”弹出窗口上的错误样式文本框查看任何错误。
- 应有可能通过弹出窗口编辑现有客户的订单。
- 应有可能从客户订单列表中打开现有客户的订单(并开始编辑订单),然后取消编辑,这不仅应取消对订单的编辑,还应关闭“添加/编辑订单”弹出窗口。
所以这就是 UI 应该做的事情,猜猜怎么着,它确实做了所有这些。那么我们该如何涵盖这些内容呢?
嗯,我们之前已经全部讲过了,所以我认为最好的方法是列出上面的功能点,然后我将简单地指向你在之前的 Cinch 文章中讨论过的地方。
演示应用程序功能点
项目 1
这是通过使用 TabControl
实现的,其项目绑定到 ObservableCollection<ViewModelBase>
,如之前 Cinch 文章的这一部分所述:CinchIII.aspx#CloseVM。
项目 2
与项目 1 相同,但通过 Mediator 检查是否已打开“添加/编辑客户”选项卡,如之前 Cinch 文章的这一部分所述:CinchII.aspx#MediatorMessaging。
项目 3
与项目 2 相同。
项目 4
与项目 2 相同,但客户对象的编辑是通过 IEditableObject
接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject。
项目 5
与项目 2 相同。
项目 6
这是通过使用 IDataErrorInfo
接口完成的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#validationRules。
项目 7
客户对象的编辑是通过 IEditableObject
接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject。
项目 8
错误如项目 6 所述,通过 IDataErrorInfo
接口显示。弹出窗口的处理是通过 IUIVizualiserService
完成的,如之前 Cinch 文章的以下部分所述:CinchIII.aspx#PopServ、CinchIV.aspx#PopServ、CinchV.aspx#UIVisualizer。
项目 9
客户订单对象的编辑是通过 IEditableObject
接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject。
项目 10
与项目 7 相同。
即将推出?
在后续文章中,我将大致如下展示:
- 一个用于快速开发 Cinch ViewModel/Model 的代码生成器,如果我有多余的时间,可能还会有更多。代码生成器将用 Cinch 编写,因此代码生成器也将作为使用 Cinch 在自己的项目中开发的第二个示例。
就是这样,希望你喜欢
这实际上是我现在想说的全部内容,但我希望通过本文,你可以看到 Cinch 是如何让演示应用程序的开发变得如此“轻松”(er well,“Cinch”)。
谢谢
一如既往,欢迎投票/评论。