这是相对于我用不污染域模型意图和库合同实现分页&在域排序驱动设计的解决方案,实现分页,并与领域驱动设计
基类排序对于REST请求
public class AbstractQueryRequest {
...
private int startIndex;
private int offset;
...
}
拦截检索查询元数据,并将其存储在ThreadLocal的容器
public class QueryInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
...
QueryMetaData.instance().setPageMetaData(/*Create and set the pageable*/);
}
}
个 的容器查询元数据
public class QueryMetaData {
private static final ThreadLocal<QueryMetaData> instance = new ThreadLocal<>() {
protected QueryMetaData initialValue() {
return new QueryMetaData();
}
};
public static QueryMetaData instance() {
return instance.get();
}
private ThreadLocal<Pageable> pageMetadata = new ThreadLocal<>();
public void setPageMetaData(Pageable pageable) {
pageMetadata.set(pageable);
}
public Pageable getPageMetaData() {
return pageMetadata.get();
}
//clear threadlocal
}
我打算检索库中的ThreadLocal的值,如果与查询到数据存储可使用它。
我希望这可能不是一个非常肮脏的解决方案,但想知道是否有更好的广泛使用的模式。
[寻呼NHibernate的(可能的重复http://stackoverflow.com/questions/1605368/paging-in-nhibernate) – theDmi
我真诚地希望它不会如此,我的问题更多地与DDD的概念性方面有关,从而不会污染具有基础性能(UI)性能的领域模型。并希望验证我对这个问题的解决方案。 –