2010-03-31 18 views
1

我们处于将相当大的“传统”3层客户端服务器应用程序传输/更新为新版本的早期设计/准备阶段。我们正在考虑对WinForms进行WPF,因为它似乎是微软推动未来发展的方向,我们希望最大化应用程序的生命周期/跨度。这就是说,在重写过程中,我们希望尽可能多地改变我们的数据访问/演示模型,以尽可能提高性能。WPF/.NET数据访问模型 - 资源建议

我一直在沿着这个方向做一些研究,但我发现讨论WPF的绝大多数资源只关注简单的数据跟踪应用程序,或者专注于非常基础的UI设计/控件。甚至讨论数据表达的少数项目也是相当初级的。

  • 是否有任何书籍/文章/推荐阅读/其他资源推荐用于大型企业级商业应用程序的开发?
  • 任何应该/可以避免的“陷阱”?
  • 一般建议尽量减少水下

回答

3

我已经开发了一个大型企业范围的WPF应用程序近2年。与任何UI开发一样,了解您正在使用的特定技术的最佳UI设计模式也很重要。根据我对WPF的经验,Model-View-ViewModel设计模式是最普遍的。了解WPF的数据绑定功能后,很容易明白为什么像M-V-VM这样的模式被接受。即使您不逐字逐句遵循M-V-VM模式(或其变体),请了解该模式解决的大图解决方案。基本上,保持您的UI/XAML文件(视图)在一个单独的文件和所有的代码隐藏/逻辑(ViewModel)在另一个文件。该视图仅对ViewModel中的更改作出反应。

保持ViewModel独立,你会有几个好处。

  • 容易地创建视图模型对象的自动化测试,因为在它没有图形组件。它只是一个具有方法/属性的对象。

  • 更容易在开发人员之间分配工作(例如,一个开发人员在另一个开发人员构建ViewModel时构建视图)。

  • 在ViewModel中使用多线程要容易得多,因为它从不直接与UI控件进行交互。你知道我的意思,如果你曾尝试在后台线程上更新文本框。

下面是一些VS从我的经验窗口形式WPF的优点/缺点的:

优点:

  • 好多了UI的外观和体验为最终用户。WPF允许您对任何UI元素的外观进行最终控制。 (例如,包含每行的图片/按钮/文本的列表框)。

  • 数据绑定是惊人的。绑定XAML文件中的UI控件以指向ViewModel类的特定属性,并且所有内容都可以正常工作。 UI简单地响应ViewModel的任何属性更改。完全分离!如果您希望多个窗口/用户控件同时显示相同的信息并自动保持同步,您会真正看到此优点。

  • 我在MSDN上读到的一切都是,微软将更多的资源投入到WPF中,而不是旧的窗体中。

缺点:

  • 大的学习曲线。如果开发人员在没有WPF经验的情况下花费几个月的时间才能创建一个复杂的用户界面,请不要感到惊讶。这是一项全新的技术,将会有一条学习曲线。

  • 某些常见的用户控件尚未由Microsoft开发(例如,蒙版文本框,数据网格)。但是,Visual Studio 2010确实带有数据网格,并且运行良好。另外,市场上还有很多第三方控制。

我能想到的最好resouces: “在C#2008年临WPF”

  • - 这本书是真棒。它超过1000页。它涵盖了几乎所有WPF领域。像参考书一样使用它。通过易于理解的例子,这很直接。

  • 链接到约什 - 史密斯的模型 - 视图 - 视图模型模式的文章:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090016

    就像我前面提到的,不要太挂在别人的版本的M-V-VM模式。更深入地了解WPF如何让您轻松创建ModelView并让View自动响应变化。

祝你好运!如果你可以通过这个学习曲线,你不会后悔WPF。

0

时间考虑寻找到使用MVVM模式。

1

VS2010团队在转换为WPF时一直保留有关获得良好性能的博客。

他们有一个系列,WPF in Visual Studio,提供了一些建议(尤其是second part)。

1

一般建议尽量减少时间水下:

  1. 了解的数据,只要你所能结合。在您制作的每个原型中使用数据绑定。即使您所做的全部工作都是围绕面板布局或栅格分隔器的工作方式进行的:将XmlDataProvider放置在窗口中,创建XML测试数据并绑定到它。如果您使用Kaxaml进行原型制作,这一点尤其有用。我不知道一旦你掌握了VS 2010就会有多重要,但是如果你使用VS 2008,Kaxaml是无价的。

  2. 阅读Bea Stollnitz关于how to debug data binding in WPF.的文章设置您的VS环境,以便在测试用户界面时始终可以看到输出窗口。

  3. 从一开始就使用MVVM和数据模板。假设代码隐藏不存在,并且在UI和数据模型之间进行互操作的唯一方法是通过数据绑定和命令。你会很快退出这个位置,但是如果你让自己从跳跃中学习,你会发现你做的所有事情都更容易。

  4. 假装你的应用程序需要能够在36" 宽屏显示器和手机上运行。你会使用固定的字体大小和衡量事物的像素?你不会的。

  5. 了解Grid的共享尺寸范围和明星大小,这两件事意味着你要在任何地方使用 问题的答案:“如何让这个元素使用屏幕上剩余空间的一半?“是:Grid(但是,如何获得此元素以使用屏幕上的所有剩余空间?)的答案是:使用DockPanel。)

  6. 请注意WPF并不成熟的技术及其含义。这并不是说它有问题(它不是,虽然有错误),或者功能不足(功能不足)(同样存在问题,但并非常常是关键问题):这就是有很多如何做的事情-X-in-WPF文章和博客文章,这些文章是在我们真正知道什么是可维护的,什么不可维护的情况下编写的验证就是一个很好的例子。您可以找到解释如何设置验证规则并将其附加到绑定的最终解释。你可能不那么容易找到后面写的文章,说明为什么你想在大多数真实场景中使用IDataErrorInfo。对于接受你发现的第一个答案,你会比平时更加​​犹豫。

  7. 如果您认为可组合性和依赖注入是模糊的架构 - 宇航员概念,并且很少适用于现实世界的软件开发,那就直截了当。

  8. 不要错过复杂的依赖属性。他们可以做很多事情,但作为一个实际问题,首先需要考虑的是变更通知和价值继承。更改通知需要一个属性设置器来做一些事情;这是内置到SetValue。值继承需要一个属性getter来做某件事;这是内置到GetValue。属性值既可以是本地也可以是继承的,这意味着不是将值存储在字段中,而是将其存储为字典条目;如果给定的财产没有本地价值(即DependencyObject的词典中没有财产价值),则DependencyObject将寻找父母以获得其价值。这个术语真的很冗长,但这些想法非常简单。

1

我发现这个资源提供了几个很好的例子。

微软多功能一站式示例代码库

微软多功能一站式示例代码库 描绘的微软开发技术 通过典型事例的框架和骨架 三个 流行的编程语言(Visual C#,VB.NET,Visual C++的Visual )。每个样品 被精心选择,组合和 记录来证明一个 经常问,测试或使用基于我们在MSDN新闻组和论坛 支持 经验 编码方案。如果你是一个软件开发商,你可以用血,肌肉和灵魂填充骨架 。如果您 是一名软件测试人员或支持 工程师和我们一样,你可能会延长 示例代码一点,以满足您 具体的测试场景或引用您的 客户对这个项目如果 客户的问题与 我们收集哪些一致。

今天是3月12日,2010年 有超过360个代码示例项目 盖24微软开发 技术,如天青,Windows 7和Silverlight的 3.收集由生长每周 六个样本。您可以在 一体式代码框架样本 目录中找到 样本的最新列表。

http://1code.codeplex.com/