首先,我们从一个简单的场景开始。现在,我需要一个订单列表,用来查询【我的订单】这一项目,支持分页,且支持高级搜索。
我们先来设计下整个查询的流程,整个查询流程如下所示。简单来说就是:首先接收查询条件、之后校验条件、添加条件、执行查询、转换 VO、 返回结果。
需要注意,因为不同公司用的语言或者代码分层可能不一样,所以,我们没必要纠结具体的代码实现,只要关注一些更高抽象层级的共性就行了。
如果 VO 里的数据都来自同一个 DB,按理来说,我们可以使用联表的方法直接映射 VO,而不需要在代码中将实体转 VO,像 mybatis 这种类库就可以很轻易地做到这一点。但是,我不建议这么做。因为以后你的数据源可能会分库分表,甚至改成第三方接口、ES、redis 等。
我们的实体中的字段,有可能太多,也有可能太少。多指的是,我返回了一些不能返回的字段;少指的是,前端要的字段,实体里不一定有。这时有人可能会问,如果实体里没有不能返回的字段,且能够完全满足前端的所有字段需求,就可以直接返回。