【发布时间】:2016-01-20 06:17:11
【问题描述】:
这是关于我在域驱动设计中实现分页和排序的解决方案为了不污染域模型和存储库合同,
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 值,如果可用,将其与对数据存储区的查询一起使用。
我希望这可能不是一个非常肮脏的解决方案,但想知道是否有更好的广泛使用的模式。
【问题讨论】:
-
Paging in NHibernate的可能重复
-
我真诚地希望它可能不是这样。我的问题更多地与 DDD 的概念方面有关,以不污染域模型与基础(UI)性能问题。并想验证我对这个问题的解决方案。
标签: java domain-driven-design ddd-repositories domain-model