我有一个标准的MVC架构,使用Spring Data JPA Repositories作为DAO层,Service层处理事务关注点并实现业务逻辑,视图层具有一些可爱的基于REST的JSON终点。
我的问题是关于Java 8 Stream在这个美妙的架构中的全面采用:如果所有的DAO都返回Stream,则我的服务也返回相同的Stream(但执行Transactional工作),我的视图对这些Stream进行操作和处理,那么当我的视图开始在Stream中处理模型对象时,由Service层创建的事务将已经被关闭。如果底层数据存储尚未将所有模型对象实现(它毕竟是一个可能懒惰的Stream),则我的视图在事务外尝试访问新结果时会出现错误。以前这不是问题,因为我会完全将结果物化为List-但现在我们处于Stream的美好新世界中。
那么,最好的处理方式是什么?在Service层内完全将结果物化为List并交还吗?让View层将完成块交还给Service层,以便进一步处理可以在事务内完成?
谢谢您的帮助!
我的问题是关于Java 8 Stream在这个美妙的架构中的全面采用:如果所有的DAO都返回Stream,则我的服务也返回相同的Stream(但执行Transactional工作),我的视图对这些Stream进行操作和处理,那么当我的视图开始在Stream中处理模型对象时,由Service层创建的事务将已经被关闭。如果底层数据存储尚未将所有模型对象实现(它毕竟是一个可能懒惰的Stream),则我的视图在事务外尝试访问新结果时会出现错误。以前这不是问题,因为我会完全将结果物化为List-但现在我们处于Stream的美好新世界中。
那么,最好的处理方式是什么?在Service层内完全将结果物化为List并交还吗?让View层将完成块交还给Service层,以便进一步处理可以在事务内完成?
谢谢您的帮助!