gpt4 book ai didi

wpf - MVVM 和分层,实现服务层

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

我正在构建一个 MVVM 应用程序。我正在尝试像这样构建我的应用程序:

enter image description here

不知道这个方法在MVVM中是否常见。无论如何,ViewModel 使用服务层来填充它正在包装的模型或 ObservableCollection。为了使用它的服务,ViewModel 有一个包含服务抽象的字段,如下所示:

IService service;

因为我使用 Linq 来查询数据库,所以我有与我的域名同名的实体。为了让 ViewModel 不知道服务层/数据库实体,我需要服务层返回域模型而不是 Linq 生成的数据库实体。我通过执行以下操作(我在工作中正在做的事情的一个例子)来做到这一点:
ObservableCollection<ItemTypeViewModel> GetItemTypes()
{
DataContextLocalDB dc = new DataContextLocalDB();
ObservableCollection<ItemTypeViewModel> itemTypes = new ObservableCollection<ItemTypeViewModel>();

foreach (ItemType itemType in dc.ItemTypes)
{
Models.ItemType type = new Models.ItemType();
type.Name = itemType.Name;
type.Description = itemType.Description;

ItemTypeViewModel itemTypeViewModel = new ItemTypeViewModel(type);

itemTypes.Add(itemTypeViewModel);
}
}

有几件事我不满意/不确定:
  • 这是结合 MVVM 构建的好方法吗?
  • 我被迫使用 Models.ItemType 使其与来自数据库的 ItemType 不同。这是不可避免的吗?
  • 我正在回馈 ObservableCollection - 也许其他东西会更好地回馈,然后在某处制作我返回的 ObservableCollection?
  • 总的来说,你看到我做出了什么可以改进或判断错误的地方?

  • 谢谢 :-)

    最佳答案

    没有理由重新创建 Linq 为您创建的数据对象。只需将它们传递给 ViewModel 就可以了。
    似乎您必须在域和 ViewModel 之间创建解耦,但由于这些实体仅包含属性而不包含逻辑,因此可以传递它们,而且编程也容易得多。

    其他一切都非常流行。唯一的一件事是我不会使用 LinqToSql,而是使用 EntityFramework。看起来差不多,只有 L2SQL 是 MS 放弃的东西。

    关于wpf - MVVM 和分层,实现服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528427/

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