我的应用程序必须处理大量数据,通常选择大小约为 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,因为它根据选择器计算出来。
现在的问题是,我无法控制传递给我的存储库的选择器。它还可能包含不可翻译的方法调用等。
我的问题是:
- 到目前为止,我一直避免创建 ViewModel,因为我害怕类型爆炸。实施它们的最佳方法是什么?我应该让选择器为我做投影吗?
- 我是否应该编写不检查任何内容的单元测试,但查询是否无异常执行?