gpt4 book ai didi

WPF MVVM - 存储库模式查询

转载 作者:行者123 更新时间:2023-12-03 10:30:46 25 4
gpt4 key购买 nike

我有一个 Web 服务,它提供了一个查询数据的接口(interface)。我正在使用 MVVM 编写 WPF 应用程序。我正在创建一个我的 View 模型可以用来检索模型的存储库。存储库将在需要时调用 Web 服务来获取数据。

我需要在我的存储库中使用各种 Find 方法来根据各种标准查找数据,而不仅仅是像“Id”这样的标准。

在我的存储库中,我创建了一个将规范作为输入的 Find 方法

void IList<MyData> Find (ISpecification spec) 

一个基本的 ISpecification 接口(interface)在哪里
public interface ISpecification<T>
{
bool IsSatisfiedBy(T candidate);
}

Find 方法的高级实现如下
  • 首先在缓存中搜索满足规范的候选
  • 如果找到返回候选人名单
  • 否则使用规范/标准调用 Web 服务来获取候选人并返回列表

  • 我对上面的 Else 场景感到困惑 - 设计规范的正确方法是什么,以便如果我在存储库缓存中没有满足规范的数据,我应该能够从规范中检索标准并调用传递的 Web 服务web方法这个标准?

    有几件事在我脑海中-
  • 如果我专门查找方法来获取具有属性/标准的专门规范,那么存储库 - 规范具有紧密耦合
  • 如果我必须直接连接到 DB(我不是),那么我可以支持一种返回 SQL 的方法。 LINQ 可能是一个选项等
  • 最佳答案

    为什么不使用 linq 表达式作为参数输入?

    例如

    public class MyModel
    {
    public int Prop1 {get;set;}
    public string Prop2 {get;set;}
    }

    public interface IRepository
    {
    T Find<T>(Expression<Func<T,object>> expression);
    }

    public class MyRepository : IRepository
    {
    public T Find<T>(Expression<Func<T,object>> expression) where T : class
    {
    //Implement your caching/ calling your web service here
    }
    }

    因此,您可以像这样调用您的存储库:
    MyRepository repository = new MyRepository();
    var model = repository.Find<MyModel>(a=> a.Prop1 == 5);

    如果您不想让用户将任何类型的类型放入泛型参数中,您可以让您的模型全部从基类继承或引入接口(interface),然后将 find 方法更改为:
    public  T Find<T>(Expression<Func<T,object>> expression) where T : IMyModelInterface //or whatever base class you want

    关于WPF MVVM - 存储库模式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263748/

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