我不太确定我想要做的最优雅的解决方案。
我有一个列出音乐列表的页面,可以有数千个这样的页面,因此它们分批分页,我还在页面顶部有4个链接来改变这些列表的订购方式。
按属性排序可以位于不同的实体上,例如Audio.AudioStats.NumComments或Audio.Artist.NumProfileViews。
我正在使用存储库模式和服务层。我的控制器只能访问服务层,然后服务层访问我的存储库。
我可以非常轻松地进行分页,我只需将当前页面和页面大小传递到我的数据层......但我如何安全地让用户决定我的实体的排序。
我正在使用S#arp Architecture 1.5.2,如果这有任何区别。
提前谢谢。
答案 0 :(得分:1)
您将不得不以某种方式将用户的愿望映射到order by子句。
据推测,你正在做类似skip(n).take(m)
的事情,这也需要一个orderby()
条款。
鉴于您有一组固定的(已知)可能性,您可以将这些可能性映射到枚举或类似内容,然后将其转换为相关的orderby()
来电。
这意味着您不会在UI层公开属性,只会将意图传递给存储库层(作为Sortby.ArtistProfileViews
值或其他)。在存储库层中隔离了如何将该意图映射到域域对象上的属性。