gpt4 book ai didi

c# - 每层的 MVVM 角色

转载 作者:太空狗 更新时间:2023-10-29 23:00:34 24 4
gpt4 key购买 nike

首先很惭愧自己折腾了这么久都没能掌握MVVM模式的精髓,不禁要问一下。

我搜索并搜索了 MVVM,但我(似乎)清楚的层只有 View 和 ViewModel 层。

到目前为止,这是我通过一些小示例掌握的内容,仅供引用,我正在使用 MySQL 查询来获取我的数据:

型号

我不清楚在这里做什么。我有这个 Employee.cs 类:

class Employee
{
public string Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
}

我的问题:我应该在 EmployeeModel 类中执行查询以从 MySQL 数据库中获取数据吗?我读到了这个 answer数据访问层与 MVVM 的模型不同,而且我可以使用存储库从我的数据访问层请求员工列表。

根据那个答案,它应该是这样的:

  • Employee.cs [对象属性定义],
  • EmployeeDataAccess.cs [负责从 MySQL 中获取员工数据]
  • EmployeeRepository.cs [由 EmployeeModel 调用以从 DA 获取员工数据]
  • EmployeeModel.cs [我处理验证等业务逻辑并在与 Employee.cs 几乎相同的属性上使用 INotifyPropertyChanged]
  • EmployeeViewModel.cs [EmployeeView 的数据上下文]
  • EmployeeView.cs [XAML]

一页员工列表的所有这些,我是不是做错了什么?

很抱歉问了这么长的问题,如果我说错了什么,我会很乐意修正它。

我现在真的一无所知,所以非常感谢任何新的观点。

最佳答案

好吧,让我们来看看:

  • EmployeeDataAccess.cs 和 EmployeeRepository.cs 可能(但不一定,请看下文)可以合并到一个类中,比如获取数据并返回模型类的“EmployeeRepository”。
  • 您的“EmployeeModel”实际上是一个 View 模型,因此我们可以删除“EmployeeViewModel”类并将“EmployeeModel”重命名为“EmployeeViewModel”。
  • 现在这一点取决于您自己的偏好,但是您可以选择通用存储库而不是每个类的存储库;在这种情况下,您将拥有一个包含适用于所有数据模型的通用 CRUD 方法的 Repository 类。

然后你会得到:

  • 每个数据模型类都有自己的 View 模型和 View (每个实体 3 个类)
  • 有一个存储库,可以在 View 模型中调用然后映射结果,或者您可以引入另一个将在 View 模型中使用的薄层,它将调用存储库并进行映射(模型 <==> View 模型) 一次性为您服务。

没那么糟糕吧? :)

不要想太多,也不要过度设计您的解决方案。在一个简单的应用程序中拥有三百个不同的间接层是没有意义的 IMO。如果应用程序增长并且有对单独层的合理需求,您可以随时开发它们。

[编辑] 当然,我假设“模型”类同时也是一个实体类;任何类型的 ORM,甚至是轻量级 ORM 都附带的(想到 Dapper)。

关于c# - 每层的 MVVM 角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14770581/

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