假设我们有 Java EE/Spring 应用程序,DAO 和最终的 @Service 对象向控制器提供数据。
我们构建 DAO/Service 方法来获取控制器/表示层所需的全部数据,包括两个方面:
- 要获取哪些数据(标准、查询位置、限制计数等)
- 要获取什么数据(懒惰/急切地获取)
现在我们可以有至少 2 个场景,使用几乎相同的方法:
- 获取 X 处的数据(它可能是复杂的条件/逻辑),但只提供简单的数据(延迟初始化给出)
- 获取 X 处的数据(与上述相同的条件/逻辑),但提供完整的初始化实体和集合等(急切的初始化给出了)。
因为控制器有处于分离状态的对象,它不能初始化“惰性部分”——我们已经通过定义获取类型或在 DAO 方法查询中做出决定。
延迟初始化解决了问题 1.,但是当我们遇到 2 号情况时,它会迫使我们在另一个 DAO/Service 方法中复制条件逻辑或创建如下方法:
getClientsFromLastMonthWithoutAddresInfo()
getClientsFromLastMonthWithAddresInfo()
getClientsFromLastMonthWithAddressInfoAndPersonalData()
如何解决这个问题?