WPF/MVVM应用程序的数据层框架的最佳特征是什么?

Edw*_*uay 6 wpf frameworks mvvm

我正在创建一个WPF/MVVM框架,它为模型类生成代码.

我打算为每个数据库表/ web服务(例如"Customers")提供两个模型类:

  • 单一模型类(例如"客户")
  • 和复数模型类(例如"客户")

单一模型类拥有其所有属性(名字,姓氏等),再加上它的所有方法,其意义为单一实例,例如保存(),删除(),CalculateSalary()等.

复数模型类具有奇异的模型对象))的集合,加上同样的方法,因为你想还上一组奇异的对象执行,如保存(),删除(,CalculateSalary(,也特别的方法,如排序(),以及使某些组非常容易的方法,例如LoadAllGoldCustomers(),甚至LoadWithSql(string sql)等.

我之前已经完成了这样的框架(PHP),它非常容易编写和理解这样的代码:

Customers customers = new Customers("all");
customers.CalculateSalary();
Run Code Online (Sandbox Code Playgroud)

一对继承的类(Item和Items)从每个数据库表的单个和复数类中获取了大部分代码,这使得编程非常干净.

但是,我很少看到其他应用程序做这个奇异/复数模型类拆分.相反,每个数据库表几乎总是只有一个类,例如Customer,这个类有任何必要的复数方法,例如GetCustomers(string sql)等.

我刚刚在WPF Model-View-ViewModel Toolkit 0.1演练中注意到,他们让你的两个模型为他们的"Models"目录两个类:

  • Customer.cs(仅限字段)
  • CustomersDataSource.cs(一个List Load()方法)

似乎是一个类似的概念,只是"复数"类被称为数据源.

所以现在我要创建另一个基于WPF/MVVM的框架,并且可以决定我想要如何构建模型类.我希望框架是:

  • 从ViewModel清晰且易于编程,因此明确分离单个和多个模型类,您应该只需要实例化一个单数或复数类并在其上调用一个方法,然后就可以获得数据了.
  • 适合MVVM模式(我理解这意味着保持尽可能简单,只需要ViewModel可以调用的属性和方法,但不实现WPF特有的功能,如INotifyProperityChanged)
  • 希望我的数据层位于任何数据源之上,所以如果我使用LINQ-to-SQL,我仍然会调用我自己的模型类,如果我想切换到在Oracle中保存,我会为我的类编写一个较低的数据适配器层来进行交互接着就,随即.
  • 尽可能最好的方式利用LINQ

我会从那些谁开发datalayers用于特别是使用WPF/MVVM /复合应用程序库和框架欣赏反馈什么样的特点你找到最好的工作,或者如果你有其他框架,如里昂证券,亚音速,等工作同样,任何经验或关于LINQ如何更改/简化构建数据层结构的想法.谢谢.

poi*_*r12 3

哇。如果没有时间坐下来与您交谈,这是一个很难回答的问题。但无论如何,这是一个缩短的版本。

首先,尝试将框架或该框架的任何特性从一种语言移植到另一种语言似乎可能是试图将方钉塞入圆孔中。虽然我不怀疑功能(例如客户和客户)可以移植,但我当然可以认为它们不应该被移植。坚持使用 customer.CalculateSalary 示例,您可以使用 .NET 并为 IEnumerable 创建一个扩展方法来执行相同的操作,从而消除对 Customers 类的需要。我知道您可能还有其他功能,但这只是一个例子。另一个示例是使用 LINQ 对 IEnumerable 进行排序。

其次,我个人发现,在对象内部使用持久性方法(例如 Save、Delete 等)在大型系统中效果不佳,尤其是在处理 WCF 时。在这些场景中,稍后使用某种类型的存储库似乎效果更好,这似乎也适合您在开发过程中切换到 Oracle 的情况。

我还想完全不同意你关于如何很好地融入 MVVM 的观点。对我来说,视图模型是模型和视图之间的粘合剂。视图模型不仅可能需要了解视图(因此,WPF 特定功能),而且希望它了解它。ICommand 是视图模型需要了解的关键接口,并且是 WPF-y 程序集之一(WindowsBase、PresentationCore、PresentationFramework,不记得是哪一个)。另外,INotifyPropertyChanged 对于数据绑定也至关重要,应该在所有视图模型中实现,并且与 WPF 无关(我认为来自 System.ComponentModel?)。

这是我的两分钱。再说一次,很难用简短的回答来解释你的问题。我建议先使用该模式一段时间,然后再为其构建框架。祝你好运!