什么是使用WPF,WCF,PRISM的更好方法

时间:2010-08-17 12:41:20

标签: sql-server wpf wcf architecture prism

我正在开发一个EMR应用程序作为我的项目。我使用WCF从集中式服务器传输所有数据,WPF用于UI,PRISM用于构建模块。

我的WPF / PRISM应用程序解决方案中有3个项目

  1. shell和bootsrapper所在的主项目(mainApplication)。
  2. 用于保存所有模块的类库(modulesLib)
  3. 与wcf服务通信的类库(基础结构)(在visual studio 2008中使用scvutil.exe添加的服务引用)
  4. 项目参考添加如下

    • mainApplication引用了'modulesLib'和'infrastructure'
    • modulesLib对“基础设施”有依据

    我目前的程序在

    之下
    1. 使用Windows服务公开了6个wcf服务(6个主机)
    2. wcf服务实现(查询,字段,表)中的硬编码数据库详细信息
    3. 使用viewmodels / presenters直接调用WCF服务(通过基础架构库)。
    4. 创建的类称为抽象ViewModelBase(实现INotifyPropertyChanged,也有IUnityContainer,IRegionManager,IEventAggregator引用),抽象ModuleBase(实现IModule),每当我添加一个viewmodel或模块​​时,我都会使用这两个类继承
    5. 我将所有数据绑定属性放入viewmodel并使用viewmodel的构造函数实例化给定视图,设置其数据上下文并将其添加到shell中的某个区域
    6. 列表项
    7. 每当我想在模块之间进行通信时,我都使用CompositePresentationEvents

      我想知道的是什么

      1. 我是否做过这样的事情,对你们来说似乎没问题。
      2. 仍有大量错误,崩溃等等。我可以有一个地方来处理这些异常,因此应用程序不会中断(日志记录或类似的东西)
      3. 使用WPF,WCF,MSSQL和PRISM处理项目的方式是什么
      4. 谢谢你, 纳顿

1 个答案:

答案 0 :(得分:2)

你做的大部分事都很好。

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

2-为了更好地对项目进行单元测试,请使用unity作为你的classe的依赖创建者,比如依赖合同而不是实际实现。

3-对于模块之间的通信,请使用EventAgreegator

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

5-如果您的UI具有像Combobox,ListBox这样的选择器控件,请尝试像复合应用程序中的Button基础那样扩展Attached属性,这样,您不会在您的代码中挂钩选择更改事件而不是能够调用命令。