gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:38:06 24 4
gpt4 key购买 nike

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

我计划为每个数据库表/网络服务(例如“客户”)两个模型类 :

  • 单个模型类(例如“客户”)
  • 和复数模型类(例如“客户”)

  • 奇异模型类具有其所有属性(名字、姓氏等)以及对单个实例有意义的所有方法,例如Save()、Delete()、CalculateSalary() 等

    复数型号类有一组奇异模型对象,加上相同的方法,因为您还想在一组奇异对象上执行,例如Save()、Delete()、CalculateSalary(),还有诸如 Sort() 之类的特定方法,以及使某些组变得非常容易的方法,例如LoadAllGoldCustomers(),甚至 LoadWithSql(string sql) 等。

    我以前做过这样的框架(PHP),它使编写和理解这样的代码变得非常容易:
    Customers customers = new Customers("all");
    customers.CalculateSalary();

    几个继承类(Item 和 Items)从每个数据库表的单个单数和复数类中取出大部分代码,这为编程提供了一个非常干净的环境。

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

    我刚刚注意到 WPF Model-View-ViewModel Toolkit 0.1演练,他们让您将两个模型作为“模型”目录的两个类:
  • Customer.cs(仅限字段)
  • CustomersDataSource.cs(一个 List Load() 方法)

  • 其中 似乎是一个类似的概念 ,只是“复数”类称为DataSource。

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

  • 我很感谢那些为框架开发数据层的人的反馈,特别是使用 WPF/MVVM/复合应用程序库,以及您发现哪些特性最有效,或者您是否使用过其他框架,如 CSLA、Subsonic 等。此外,任何经验或关于 LINQ 如何更改/简化构建数据层结构的想法。谢谢。

    最佳答案

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

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

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

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

    那是我的两分钱。同样,在对您的问题的简短回答中很难解释这一点。我建议先使用该模式一段时间,然后再为其创建框架。祝你好运!

    关于wpf - WPF/MVVM 应用程序的数据层框架的最佳特性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/863186/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com