2010-08-17 62 views
2

我正在开发一个EMR应用程序作为我的项目。有Im使用WCF从中央服务器传输所有数据,用于UI和PRISM的WPF构建模块。什么是更好的方式来使用WPF,WCF,PRISM

我有3个项目在我的WPF/PRISM应用

  1. 液的主项目(mainApplication),其中外壳和bootsrapper是。
  2. 类库(modulesLib)持有的所有模块
  3. 类库(基础设施)与WCF服务(增值业务与参考scvutil.exe在Visual Studio 2008)

项目引用添加作为沟通下面

  • mainApplication有 'modulesLib' 和 '基础设施' 的引用
  • modulesLib有refence为 '基础设施'

我现在的程序是下面

  1. 有6个WCF服务(6个主机)使用的是Windows服务
  2. WCF服务实现内部硬编码数据库的详细信息(查询,字段,表)
  3. 曝光直接用模块的视图模型/演示者(通过基础架构库)调用WCF服务。称为抽象​​ViewModelBase(其实现INotifyPropertyChanged,还具有IUnityContainer,IRegionManager,IEventAggregator参考文献),抽象ModuleBase(它实现的IModule)
  4. 创建类和我使用这些2类从每当我添加视图模型或模块继承
  5. 我把所有的数据绑定属性中视图模型,并使用视图模型的构造函数来实例化一个给定的视图,设置它的数据上下文,并在外壳添加到区域
  6. 列表项

每当我想之间的通信模块,我使用CompositePresentationEvents

我想知道

  1. 我做事情的方式,是否是它似乎为你们确定什么。
  2. 仍然有大量的错误,崩溃的错误等..我可以有一个地方来处理这些异常,所以应用程序不会中断(日志或类似的东西)
  3. 什么是你的方式来处理项目使用WPF,WCF,MSSQL和PRISM

谢谢你, 纳顿

回答

2

你们中的大多数已经做过的事情是好的。

但是对于日志记录模块:在您的基础架构中创建一个单独的项目,并将其注册为Unity的单例对象。

2 - 为您的项目更好的单元测试,使用统一在它的全为您的CLASSE的依赖创作者喜欢依赖的合同,而不是实际的实现。

3-对于Communication您的模块之间使用EventAgreegator

4-对于全局命令使用CompositeCommand。

5-如果你的用户界面有像Combobox,ListBox这样的选择器控件,试着扩展Attached属性,就像在Composite Button for Button base中做的那样,这样你就不会在你的代码中勾选选择已更改的事件,能够调用命令。

+0

喜SAURABH,在您的文章几点引起我的注意:)。附加属性扩展(I当前把手选择的项目通过在视图模型的属性结合到列表/组合框的selectedItem属性改变,然后在INotifyPropertyChanged的实施我已经把一个开关来执行另一种方法)和测井的方法。我会对这些进行一些研究。如果你不介意,我将不回答这个问题,所以人们仍然可以分享他们的想法。希望其对你罚款:)感谢您的答复.. – Nadun 2010-08-19 15:01:07

+0

阅读从终端到终端的[棱镜手册(http://msdn.microsoft.com/en-us/library/gg406140.aspx)。这会给你MVVM,命令和event2command等数百万想法。 – Shimmy 2011-03-01 03:43:07