2009-11-06 45 views
2

我完全不熟悉WPF,因此我花时间在网上搜索有关如何完成任务的示例和教程。我总结出前进的道路是尝试使用MVVM模式作为我的应用程序结构的指导。如果不是我的技术能力,我对这个理论完全满意。我有一个或两个问题,希望可以或许点我就有关应用程序设计的几个问题的正确方向。WPF,应用程序设计建议和数据库并发性

  1. 我希望保留一份客户名单。我见过几个这样的例子。这些涉及加载包含Customer对象列表的Customers存储库。为客户创建相应的View和ViewModel。当用户选择一个客户编辑,视图,并在客户收集客户对象被创建视图模型。这会在进行更改时使所有内容保持同步。我的问题是:我的客户模型是非常复杂的,它包含了基本的客户信息,姓名,地址等,但属性也对客户,类别列表,产品简介,目标预算等等。我想这些是可用于在客户编辑查看,但不希望将它们加载到客户存储库中。我只想在需要时加载扩展的客户信息,但要更新客户视图的更改。达到此目的的最佳方式是什么?

  2. 我的第二个问题是:如果我将客户信息分成几个标签,我应该为每个标签有单独的View和ViewModel,还是只有一个View。最佳做法是什么?

  3. 我想我会使用Linq to SQL来处理数据库处理。在多用户环境中客户可能同时被多个用户添加。我如何反映客户存储库中其他用户所做的新增功能?我需要重新加载吗?

  4. 有关处理数据库并发问题的任何建议。如果另一个用户编辑或删除一个客户我目前编辑,当我尝试和保存应该发生什么?我所熟悉的数据集和ADO.net和处理使用DataAdapter时产生的任何错误的并发,是不是也有类似的方法与LINQ to SQL的?

我明白这里有很多含糊的问题。但我会感谢所提供的任何指导。

问候 添

回答

1

我会告诉你我的意见,但你必须要形成你自己的观点。

我不太喜欢这些样品,因为他们只为一个实体(客户)工作很多。我有很多我的应用程序的实体,所以我结束了一些代码生成和使用更多的继承。

样本需要一些现实检查。例如,在Josh Smith MVVM示例中,如果更改客户,则更改会传播到列表和其他地方,这在示例中很不错,但如果您有一个业务应用程序,则不需要传播除非用户按下了“保存”并将所有业务规则应用于对象。

我也不会购买纯MVVM,因为禁止在代码背后放置任何东西,而且您必须code lots of lines only for a double-click,来人上,这是一个简单的双击。

关于你的问题:

  1. IMO实现延迟加载列表(see Rob Connery post)的单一视图。
  2. 您必须重新加载。添加刷新按钮以列出并让用户决定何时刷新。
+0

Eduardo,非常感谢您的意见。我完全同意你的意见。样品非常有用,我非常感谢任何花时间提交它们的人。我只希望我能找到解释如何在现实世界和复杂应用程序中做事的人。我做了想要的代码,只是我指向正确的方向。 – Tim 2009-11-06 14:39:59

1

我开源一个sample framework called SoapBox Core与MVVM做WPF(也使其扩展与MEF)。如果你忽略MEF部分,关于如何做你正在谈论的内容,有几个好主意。我将特别关注一下Options对话框的工作原理,因为它解决了Eduardo指出的问题(你如何处理编辑某些事情,而只是在用户提交更改时将结果发布到应用程序的其余部分)。在这种情况下,它使用.NET中的用户设置作为后备存储,但它可以使用任何你想要的东西,比如实体。

+0

非常感谢,我现在下载并检查出来。问候 – Tim 2009-11-09 09:17:15