gpt4 book ai didi

wpf - WPF和LINQ/SQL-如何以及在哪里跟踪更改?

转载 作者:行者123 更新时间:2023-12-03 10:18:53 26 4
gpt4 key购买 nike

我有一个使用MVVM模式构建的WPF应用程序:

  • 我的模型从LINQ到SQL。
  • 我使用存储库模式来抽象化DataContext。
  • 我的ViewModel引用了模型。
  • 在ViewModel上设置属性会导致将该值写入模型。

  • 如您所见,我的数据存储在模型中,因此DataContext可以跟踪更改。

    但是, in this question我读:

    The guidelines from the MSDN documentation on the DataContext class are what I would recommend following:

    In general, a DataContext instance is designed to last for one "unit of work" however your application defines that term. A DataContext is lightweight and is not expensive to create. A typical LINQ to SQL application creates DataContext instances at method scope or as a member of short-lived classes that represent a logical set of related database operations.



    您如何跟踪更改?在您的DataContext中?在您的ViewModel中?别处?

    最佳答案

    当我编写此类软件时,我的VM从未以任何方式引用数据模型。当您像这样将它们配对时,您几乎已经结识了一个简单的两层解决方案,这很难实现。

    如果您完全断开DataContext与VM的连接,并使它们独立运行,则您的应用程序将变为:

  • 可测试的更多-无需数据上下文
  • 即可测试您的VM
  • 在数据层可能是无状态的-更改您的体系结构以采用基于无状态3层的解决方案很容易。
  • 能够轻松集成其他数据源-您的VM可以优雅地包含其他数据源的聚合和组合。

  • 简而言之,是的,我建议在整个应用程序中将数据访问类与ViewModel对象分离。它可能需要更多的代码,但是随着体系结构的灵活性,它将为您带来很多好处。

    编辑:一旦L2SQL对象越过分发边界,我就不会使用它们的更改跟踪功能。这很快就变成了蠕虫病毒的 jar 头-您可能需要花费大量时间在 View 模型内部维护和提供数据模型的对象图-这不仅增加了ViewModel的复杂性,而且至少将ViewModel传递地耦合到了数据库的架构。我没有这样做,而是使ViewModel变得纯净。当需要保留它们的时候到了,您的服务层/存储库/ViewModel和数据对象之间的转换都将执行。乍一看,这似乎需要做很多工作,但是对于除简单CRUD以外的任何其他功能,此设计都能很快获得返回。

    关于wpf - WPF和LINQ/SQL-如何以及在哪里跟踪更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911794/

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