带有XML模型和LinqToXml的MVVM?

时间:2009-07-15 18:36:42

标签: wpf xml mvvm xsd linq-to-xml

我一直在阅读MVVM模式,我想在一个相对较小的WPF项目上试一试。该应用程序将是单用户。输入和输出数据都将存储在“关系”XML文件中。带有Keys和KeyRefs的模式(XSD文件)用于验证文件。

我也开始尝试使用Linq和LinqToXml,我写了几个非常复杂的查询,实际上有效(小胜利:))。

现在,我正在尝试将它们放在一起,而且我发现我对模型与ViewModel的内容有点混淆。以下是我到目前为止一直在努力的选择:

  1. 我应该将Model视为XML文件本身并将所有LinqToXml查询放在ViewModel中吗?换句话说,甚至不写一个名为Model?的类。
  2. 我应该编写一个只是XML文件和XSD架构集的简单包装的模型,并执行验证,保存更改等吗?
  3. 我应该在ViewModel中的模型和“视图特定”查询中放置“基本”查询吗?如果是这样,我应该在哪里画出这两个类别之间的界限?
  4. 我意识到这个问题不一定是“正确”的答案......我只是在寻找建议和优点/缺点,如果有人知道类似场景的代码示例,那就太棒了

    谢谢,

    -Dan

2 个答案:

答案 0 :(得分:3)

对于小型应用程序,具有单独的数据访问,域模型和表示模型层可能看起来有点过分,但是对这样的应用程序进行建模将有助于您确定哪些内容在哪里。即使您不想将应用程序分解为三个不同的项目/库,考虑每个功能应该去哪里都可以帮助您做出决定。

有鉴于此,纯数据访问(即加载XML文件,查询和更新它们)属于数据访问层,因为它们是特定于技术的。

如果您的任何操作与您的特定数据访问技术无关,但可能被认为在您的应用程序域中普遍适用,则这些操作应该进入域模型(或某些人称之为业务逻辑)。 / p>

任何逻辑,其唯一目的是为特定用户界面技术(在您的情况下为WPF)提供特定功能,应该进入演示模型。

在您的情况下,XML文件和所有LINQ to XML查询都属于数据访问层。

要使用MVVM,您需要为应用程序中的每个View创建一个ViewModel。

从您的问题来看,我不清楚您是否有任何可以被视为领域模型的东西,但验证之类的东西是一个很好的候选人。这样的功能应该进入域模型。域模型中的任何类都不应直接绑定到View。相反,ViewModel负责在域模型和视图之间进行转换。

所有WPF特定的东西应该放在ViewModel中,而应用程序中的其他类应该不知道WPF。

答案 1 :(得分:0)

斯科特·汉塞尔曼(Scott Hanselmen)有一个播客,详细讨论了这个话题,与伊凡格里菲斯(Ian Griffiths),他是一位对WPF非常了解的人,并且合着了一本名为“编程WPF”的O'Reilly书。

Windows Presentation Foundation由Ian Griffiths解释
http://hanselminutes.com/default.aspx?showID=184

简短(非常不完整)的答案是视图包含可视对象和操作它们的最小逻辑,而视图模型包含这些对象的状态

但请听播客。伊恩说它比我更好。