WPF应用程序中的业务逻辑放置

时间:2013-01-26 23:33:15

标签: c# wpf ef-code-first sql-server-ce prism

这可能是一长串问题,但请耐心等待。我开始使用WPF,PRISM,CODE FIRST和SQL CE构建LOB应用程序,在我第一次申请(或尝试)之后,我有很多问题,所以首先:

  1. 业务逻辑应该在模型中还是在域层上方的BLL层中?
  2. 应该查看模型是否接收对存储库的引用,还是只应由域模型对象使用存储库?
  3. 以另一种方式提出第二个问题,应该给出什么样的对象才能查看模型?
  4. 我在显示中使用相同的视图模型(例如在数据网格中)并在表单中进行编辑但是会导致很多麻烦,有没有更好的方法可以在没有代码重复的情况下执行此操作?
  5. 我遇到的最大问题是我总是在层次关系中组织我的视图模型,而不允许层次结构中的子节点获取对父节点的引用,并且因为视图绑定到那些子节点并调用导致添加的子节点对于存储库的对象我找不到通知父母对这些存储库的更改的方法。所以绑定的视图可以更新,我看到有些人使用事件解决这个问题,但我不喜欢这个解决方案,我想知道是否有更好的方法来做到这一点?
  6. 任何人都可以指出使用上述技术构建现实LOB应用程序的示例,至少不是使用VB .NET或WCF的示例(我想要本地数据库)。

1 个答案:

答案 0 :(得分:1)

我正在开发一个LOB应用程序,包括WPF,实体框架代码优先和带有本地数据库的SQL CE 4.0。我没有使用PRISM,但我正在使用MEF作为IoC和我自己的实现。

  1. 到目前为止,我建议您使用Code-First方法的优势,并尽可能在域类中实现尽可能多的业务逻辑。同时在其中实现INPC。如果不这样做,您最终会在ViewModel中复制所有属性,这是无稽之谈。没有规则说模型应该是愚蠢的(尽管有些人倾向于这么认为),但是一个愚蠢的模型只会使ViewModel更加繁琐。
  2. 在不了解您的项目的情况下,没有明确的建议,但常识:尽量坚持最佳实践,除非他们开始妨碍您。 “完美”往往是“好”的敌人。
  3. 让ViewModel获取他们需要的任何内容(单个模型对象,集合等)来为您的视图提供服务。通常,更简单的解决方案从长远来看更容易维护。
  4. 我不太明白你的意思...如果可能的话,我会多次使用我的ViewModel,但是如果你在尝试让一个VM工作时遇到麻烦,那么认为ViewModel的功能就是为View提供服务对于多个视图,您可能需要将其划分为两个不同的VM。只需收集基类中的所有公共属性和方法,并根据需要从中继承。
  5. 虚拟机之间有一些松散耦合的方式可以相互通信。我正在使用MVVM Light Messenger类来做这些事情,但我知道PRISM提供了类似的功能。如果你不滥用它,那么引用孩子的父母并不是罪。我有一个ViewModelBase< T>并且孩子有一个引用父指向基类并指定T类型的引用,到目前为止,硬引用和松散引用之间有很好的平衡。
  6. 如果有人指出你这样的例子,请告诉我!实际上,使用本地数据库应该更简单。在我的情况下,我正在使用单例上下文(许多人似乎厌恶)但由于这是一个本地应用程序,单个用户并没有线程复杂性,单例上下文使我的生活更容易。在这种情况下,我还在等待找到一个不这样做的真正理由。
  7. PS:有些人可能会对你的问题进行投票,因为......这不是一个问题,它为很多辩论开辟了空间。如果它关闭,请尝试聊天。

    希望这对你有所帮助,问候!