我在WPF应用程序中说了以下View Model。
public class User : ViewModelBase
{
public string Name { get { return _name; } set { _name = value; OnPropertyChanged("Name"); } }
public int Age { get { return _age; } set { _age = value; OnPropertyChanged("Age"); } }
}
现在,这些信息将从NoSQL数据库中存储和提取。我的问题是,我是否应该在我的项目中保留单独的Class以便存储和检索NoSQL数据库,并且一旦检索到信息,构建View Model或者只使用NoSQL的View Model就可以了,当然这种方法会省去很多麻烦。
NoSQL社区在这方面的推荐方法是什么?
答案 0 :(得分:1)
对此有许多不同的方法,如果将对象存储在RDBMS,NoSQL或某些可以再次执行其所需的Web服务中,则无关紧要。
确实如此,如果您不必创建视图模型,则更容易 - 直到某一点。通常,您会发现通过仅对WPF实现有效的附加属性来扩展模型,并且绑定这些属性比创建具有不同条件的模板更容易。我想到的一个例子是你的视图上的颜色代码,或者你想要显示的其他文本。
这些信息不能出现在原始模型中,因为它与您的客户无关。我们在一个项目中通过使用[XmlIgnore]
注释这些属性来解决它 - 这样,在与服务器通信时它们没有被序列化,我们不必创建额外的ViewModel。您可能会发现这样的事情对您来说已经足够了。
另一方面,对于Web应用程序,使用JSON序列化数据时,您不希望向客户端发送过多信息也很重要。这里很难(有时不太可能)调整一些自动生成的类定义以便适当地注释它们。在这种情况下,您唯一的选择是创建特殊的ViewModel并将数据从一个复制到另一个。
最后还有另外一个因素 - 您可能希望(或者更确切地说,应该)将DataAccess逻辑与其他逻辑分开。这样,如果您决定使用不同的存储机制,则只需重新实现该部分,并确保可以将新模型转换为已建立的ViewModel,因此您无需更改所有内容。
您现在必须自己决定 - 您的DataAccess基础架构有多固定,是否会更改任何内容并且注释是否足以隐藏数据存储中WPF绑定所需的其他信息?或者您需要在Model和ViewModel
之间进行分离