最近写了几坨....代码....
其中有几坨高度相似,最近看到 DRY 原则,不知道能不能... 改善一下
// 根据用户 id 获取用户列表数据
List<Long> userIds = page.getList().stream().map(ArticleRespDto::getUserId).collect(Collectors.toList());
UserQueryDto userQueryDto = UserQueryDto.builder().idList(userIds).build();
ResponseBase<List<UserRespDto>> userResponse = userQueryApi.queryByParam(userQueryDto);
List<UserRespDto> userList = ResponseUtil.checkResponse(userResponse);
Map<Long, UserRespDto> userMap = CollectionUtils.listToMap("id", userList);
// 根据商品 Id 获取商品列表数据
List<Long> productIds = page.getList().stream().map(ArticleRespDto::getProductId).collect(Collectors.toList());
ReleaseOrderQueryDto releaseOrderQueryDto = ReleaseOrderQueryDto.builder().idList(productIds).build();
ResponseBase<List<ReleaseOrderRespDto>> releaseResponse = releaseOrderQueryApi.queryByParam(releaseOrderQueryDto);
List<ReleaseOrderRespDto> releaseList = ResponseUtil.checkResponse(releaseResponse);
Map<Long, ReleaseOrderRespDto> releaseMap = CollectionUtils.listToMap("id", releaseList);
就是上面两坨,功能就是通过 ids 集合,获取数据.... 中间用不同的 service 去请求数据.... 虽然 ctrl C+V 改一下就完了,但是还是想问一下各位大神们有没有什么好的处理方法。
俺是比较菜,代码写的不好,问的简单也别笑话我......
1
haokuderen 2021-06-10 09:14:45 +08:00
设计模式
|
2
3dwelcome 2021-06-10 09:18:46 +08:00
java 不愧是最啰嗦的语言,没让我失望。
|
3
manami 2021-06-10 09:20:13 +08:00 1
|
4
Leviathann 2021-06-10 09:27:14 +08:00 via iPhone
其实就三行
没啥好抽的 |
5
newee OP @haokuderen 好吧 感觉自己基础薄弱 有时间去研究一下设计模式 看有没有什么好的方法
@3dwelcome 这就尴尬了 是我比较菜 没写得优雅 @manami 图片打不开 @Leviathann 好吧 感觉也是 |
6
Leviathann 2021-06-10 09:53:40 +08:00
@newee 看起来长主要是类型声明然后还有 `collect(Collectors.toList())` 这种模板代码
类型声明直接用 idea 的 .var 后缀快捷输入就行,然后常用的单步 stream 操作 filter map 也可以抽几个 util 啥的 |
7
THESDZ 2021-06-10 10:13:17 +08:00
这个地方已经没啥封装的必要了,抽成为代码就是
//提取 id 列表 //通过 id 列表查询实体列表 //校验返回是否成功 //list2map 其中公共的地方已经使用了 java 的封装 - 提取 id 列表 - 校验返回 - list2map 如果再封装,个人觉得没必要 不要为了封装而封装,尤其是业务代码 非业务代码,或者固定业务模式的代码可以进行封装 |
8
uselessVisitor 2021-06-10 10:29:36 +08:00
没有必要过度封装甚至过度使用设计模式,这样我觉得很清晰,每一步该做什么后续维护的人也可以明白
如果 [根据 id 获取用户列表数据 /根据商品 id 获取商品列表数据] 涉及到重用,可以封装为方法 |
9
luzhh 2021-06-10 10:39:18 +08:00
你这个很明显,可以封装:
Map<Long, ?> getList(Page page, Function page2Id, QueryInfoDto dto1, RespDto dto2) {} |
12
xz410236056 2021-06-10 10:47:45 +08:00
@66beta OC 哪里啰嗦。。
|
13
xz410236056 2021-06-10 10:49:04 +08:00
@3dwelcome java 也有域运算符了吗
|
14
qiuhang 2021-06-10 14:25:10 +08:00
就这样挺好的。建议业务代码不要过度封装,更不要随便用设计模式,cv 就 cv 了,简单易读才是硬道理。
|
16
sheepzh 2021-06-10 14:36:31 +08:00
如果不懂业务框架(不是技术框架),或者说对未来业务发展没有把控力的话,我觉得这种体量的业务代码,直接一把撸最好。不用过度抽象和设计了了。
|
18
neptuno 2021-06-10 14:49:11 +08:00
就这样挺好的,没必要为了抽象而抽象
|
19
darksword21 2021-06-10 15:20:52 +08:00 via iPhone
千万别一件小事封装的代码他妈都不认识他然后除了你自己根本没人用你封装过的代码,没错说的就是我们 leader
|
20
newee OP 感谢各位大佬的热心帮助 学习了
|
21
css3 2021-06-10 20:41:21 +08:00
猛一看以为乱码😂
|