我正在创建一个WPF / MVVM框架,它为模型类生成代码。
我打算为每个数据库表/网络服务(例如“客户”)两个模型类:
奇异模型类具有其所有属性(FirstName,LastName等)以及对单个实例有意义的所有方法,例如: Save(),Delete(),CalculateSalary()等。
复数模型类具有一系列奇异模型对象,加上相同的方法,因为您还希望对一组单个对象执行操作,例如: Save(),Delete(),CalculateSalary(),还有特殊的方法,如Sort(),以及使某些组变得非常容易的方法,例如: LoadAllGoldCustomers(),甚至LoadWithSql(string sql)等。
我之前(PHP)已经完成了这样的框架,它非常容易编写和理解这样的代码:
Customers customers = new Customers("all");
customers.CalculateSalary();
一对继承的类(Item和Items)占用了每个数据库表的单个单数和复数类的大部分代码,这为编程创建了一个非常干净的环境。
然而,我很少见到其他应用程序这样做单数/复数模型类拆分。相反,每个数据库表几乎总是只有一个类,例如Customer
这个类有多种必要的方法,例如GetCustomers(string sql)等
我刚刚在WPF Model-View-ViewModel Toolkit 0.1演练中注意到,他们为你的“模型”目录制作了两个模型两个类:
哪个似乎是一个类似的概念,只是“复数”类被称为DataSource。
所以现在我要创建另一个基于WPF / MVVM的框架,并且可以决定如何构建模型类。我希望框架是:
我很感谢那些为框架开发数据层的人的反馈,特别是使用WPF / MVVM /复合应用程序库,以及您发现哪些特性最好,或者您是否使用过其他框架,如CSLA,Subsonic等。另外,关于LINQ如何更改/简化构建数据层结构的任何经验或想法。感谢。
答案 0 :(得分:3)
哇。如果没有一天坐下来与你交谈,这是一个难以回答的问题。但无论如何,这里都是一个缩短的版本。
首先,尝试将框架或该框架的任何特征从一种语言移植到另一种语言似乎可能试图在圆孔中推入一个方形钉。虽然我不怀疑可以移植功能(例如客户和客户),但我当然可以争辩说不应移植它们。坚持使用customer.CalculateSalary exmaple,你可以使用.NET并为IEnumerable创建一个做同样事情的扩展方法,从而消除了对Customers类的需求。我意识到你可能还有其他功能,但这只是一个例子。另一个例子是使用LINQ对IEnumerable进行排序。
其次,我个人发现在对象内部使用持久性方法(例如Save,Delete等)在大型系统中不能很好地工作,特别是在处理WCF时。在这些场景中似乎可以更好地使用某种类型的存储库,这似乎也适用于在开发过程中切换到Oracle的过程。
我还想完全不同意你关于适应MVVM的问题。对我来说,视图模型是模型和视图之间的粘合剂。视图模型不仅可能需要知道视图(因此,WPF特定功能),而是希望它知道它。 ICommand是视图模型知道的关键接口,并且是WPF-y程序集之一(WindowsBase,PresentationCore,PresentationFramework,不记得哪个)。此外,INotifyPropertyChanged对数据绑定也很重要,应该在所有视图模型中实现,而且与WPF无关(我认为来自System.ComponentModel?)。
那是我的两分钱。同样,在对您的问题的简短回答中解释这一点真的很难。在建立框架之前,我建议使用该模式一段时间。祝你好运!