寻找示例时,似乎所有内容(如LinQ)都面向SQL数据库。然而,对于许多NoSQL数据库,即使只是“从表中选择*”的查询也需要预定义视图。然而,如果存储库映射Web服务,甚至查询类型也更加严格。
是否有将非SQL数据库的限制考虑在内的规范模式变体?我觉得这需要使用继承和静态声明来支持不同类型的持久性后端。
我应该如何在我的存储库中组合“排序”和“过滤”?以订单项列表的存储库为例。
(Query)findAllSortedByDate;
(Query)findAllSortedByName;
(Query)findAllSortedByQuantity;
这些是表格显示时不同类型的排序方式。由于我可能处理大量结果,因此从未考虑在我的视图或视图模型中进行排序或过滤。最初,我考虑使用一个“Proyection”类,根据用户操作从存储库中选择正确的查询。但是,如果我想结合不同的排序策略和不同的过滤器,这种方法效果不佳。
显然,我需要某种类型的“规范”对象,但我不确定:
1. 我应该将它们用于我的存储库,使它们更加智能吗?还是应该将它们用于我的视图模型? 2. 如何为良好的多语言持久性正确限制我的规范对象?
最初,我考虑使用作为“类似集合接口”的{{link1:Repository}}执行任何查询,但现在我注意到,一个view model也可以作为“有状态”的类集合接口,而前者则是“无状态”的类集合接口。
- 总体来说,我是否应该尝试在我的代码库中保留任何类型的排序/过滤?如果所有查询结果都可以加载到内存中,这样做似乎会增加不必要的复杂性。
更新:为了让这个问题更有趣,考虑到虽然NoSQL视图可以被过滤和排序,但全文搜索可能需要一个外部索引引擎,例如Lucene或SQLite-FTS,仅提供用于对查询进行排序和过滤的实体的唯一标识。