1

我的应用程序必须处理大量数据,通常选择大小约为 10000 行。为了提高性能,建议仅选择所需的数据。

当我必须进行计算或任何有意义的业务时,我很乐意选择所有数据以正确实例化我的模型,这样我就可以依赖它的功能。

当仅查看数据(通常在表中)时,这不是我想要的,我想将检索到的数据量限制在绝对最小值。

到目前为止,我已经使用以下方法从我的存储库中获取数据(下面显示的是在存储库中执行所有魔法的方法

private IEnumerable<TResult> GetAllProject<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate)
{
    SetReadContext();
    var query = DataContex.Table<Order>().Where(predicate).Select(selector);

    return query.ToList();
}

这样,我在调用存储库的方法中就有了匿名类型的类型定义,并且我可以透明地使用那里的类型。

每个控制器都可以准确定义要传递给视图的数据,它非常有效,因为我可以直接影响列排序等,而无需处理视图中的网格控件来为我做这件事。我不需要 DataContext 上的任何 LoadOptions,因为它根据选择器计算出来。

现在的问题是,我无法控制传递给我的存储库的选择器。它还可能包含不可翻译的方法调用等。

我的问题是:

  1. 到目前为止,我一直避免创建 ViewModel,因为我害怕类型爆炸。实施它们的最佳方法是什么?我应该让选择器为我做投影吗?
  2. 我是否应该编写不检查任何内容的单元测试,但查询是否无异常执行?
4

1 回答 1

1

我建议您创建 ViewModels,以便您使用一组已知的类,类型爆炸并不是一个真正的问题,因为您目前正在使用匿名类型,这可能有点难以管理。

如果您(通常)每个 View 有一个 ViewModel,那么它就会变得相当干净。在某些情况下,您甚至可以共享您的 ViewModel,尽管我建议您不要这样做,因为迟早会有一个消费者最终需要更多数据/字段,而另一个最终会得到一个臃肿的 ViewModel。

于 2009-09-11T11:55:12.463 回答