给大家观摩一下,给我看傻了
![]() | 1 levelworm 2024-09-04 11:55:38 +08:00 这大概就是不停的粘贴复制造成的吧,懒得重构了? |
2 TsubasaHanekaw 2024-09-04 11:56:13 +08:00 ![]() 导入导出 excel 表格真是最屎的活 |
3 szpinc1102 OP @levelworm 这是新写的代码,新代码都能写成这样 |
![]() | 4 robinchina 2024-09-04 11:58:40 +08:00 ![]() 能用就行 |
5 szpinc1102 OP @TsubasaHanekaw 但是也不能写成这样吧 |
![]() | 6 zizon 2024-09-04 11:59:58 +08:00 ![]() 你看中间凸出的 应用服务器 等几个你就知道这种写法的某种形式的干净存粹了. |
7 jiabing520a 2024-09-04 12:00:08 +08:00 ![]() 就说是不是一目了然吧,(●''●) |
8 jorneyr 2024-09-04 12:00:46 +08:00 ![]() 你就说这是不是执行效率最高的实现吧!!! |
9 moudy 2024-09-04 12:01:05 +08:00 via iPhone @szpinc1102 有可能是脚本生成的 |
11 fruitmonster 2024-09-04 12:05:18 +08:00 所以最合理的方式是使用 map? 还是怎么 |
![]() | 12 tool2dx 2024-09-04 12:14:04 +08:00 ![]() 90%的业务代码又没性能需求,我都是随便写的,怎么好维护,就怎么来。 |
13 lervard358 2024-09-04 12:14:34 +08:00 好奇 正确的写法是啥 弄个 table ,提前把映射关系弄好吗 |
![]() | 14 puzzle9 2024-09-04 12:30:53 +08:00 能用 直观 虽然看起来不优雅 不过 你给对方发工资吗 不发的话 那管啥子 |
![]() | 15 greensea 2024-09-04 12:34:37 +08:00 说不定是 copilot 写的呢,反正 tab 一下就都出来了,毫不费力 |
16 bug123 2024-09-04 12:39:55 +08:00 ![]() 好奇有更好的写法吗 |
17 AlexRoot 2024-09-04 12:45:15 +08:00 想知道这个长截图是如何实现的? |
18 laoyur 2024-09-04 12:45:36 +08:00 CA IP 表示看不到图 |
19 smdbh 2024-09-04 12:48:29 +08:00 其实也没啥不好 |
20 laoyur 2024-09-04 12:50:53 +08:00 额,发完上面的回复突然又能看到了 如果确实需要通过字符串比较,那这样写好像也没毛病啊,至少很清晰 可能大部分执行的都是同样的一句代码,显得比较嗦,可以把条件合并起来 |
![]() | 21 ConquerZ 2024-09-04 12:58:13 +08:00 你们都能看到图吗 |
![]() | 22 bgm004 2024-09-04 12:58:22 +08:00 via Android ![]() 还行,我手上一个项目一个 vue 页面 6000 多行,一个 echart 图表依赖 2 个 json ,文件合计 20 几 k |
![]() | 23 woodwhales 2024-09-04 13:01:11 +08:00 这段代码,从语法结构上看是 Java 。可以推测这段代码在导出 excel 文件并设置满足条件的指定列进行隐藏。如果是我重构,我能想到的是去除多重 if else ,用 map 集合先保存每个条件,然后一个循环遍历 map 中是否存在满足条件。伪代码如下: ```java // 业务逻辑外部定义 static Map<String, Function<ExportColumn>> map = new HashMap<>(); static { map.put("服务器名称", data -> !data.getAppServer().isServerName()); } // 业务逻辑内 if(map.containsKey(cell.getStringValue())) { boolean flag = map.get(cell.getStringValue()).apply(dto.getExportColumn()); sheet.setColumnHidden(index, flag); } ``` |
![]() | 24 ooxx2123 2024-09-04 13:18:22 +08:00 要我重构的话,也是 23L 的思路,好奇大家有什么其他方式吗? 或者保留原样,我感觉也还好,就是看起来不太简洁。 |
![]() | 25 potatowish 2024-09-04 13:23:01 +08:00 via iPhone excel 导入导出是初级 java 必备技能,怎么把很容易写成的代码写的优雅这就是中级 java 的技能了 |
26 ma836323493 2024-09-04 13:43:03 +08:00 用反射, 另外 model 上一般也有注解 ApiModelProtery |
![]() | 27 yb2313 2024-09-04 13:47:48 +08:00 丑陋的 equal |
28 ice 2024-09-04 13:51:58 +08:00 挺好,我想不到重构的方法,而且也没想到最后生成的 Excel 是个多复杂的玩意 |
![]() | 29 loocao 2024-09-04 13:52:39 +08:00 清晰明了,简单又方便维护 |
![]() | 30 adminii 2024-09-04 13:55:58 +08:00 via iPhone 项目组代码量考核,第一了 |
![]() | 31 awalkingman 2024-09-04 13:56:19 +08:00 @yul36074 第一次加载需要挺长时间 |
![]() | 32 chenyu8674 2024-09-04 13:57:28 +08:00 ![]() 虽然不优雅,但好处是随便换个开发都能懂 离真正的屎山差远了 |
33 jackOff 2024-09-04 13:59:05 +08:00 整个枚举类,初始化时把枚举类灌入一个 map 里面 |
34 0xcode 2024-09-04 14:00:08 +08:00 这代码写的很优雅啊,谁上手看一眼都能维护的来。 |
![]() | 35 justfindu 2024-09-04 14:01:13 +08:00 ![]() 先不要吐槽, 先改一版你觉得好的. 一起放出来 |
36 luohaiyang 2024-09-04 14:03:36 +08:00 又不是不能用,狗头 |
![]() | 38 junwind 2024-09-04 14:03:39 +08:00 这种千万千万不要想着重构,能跑就行。 |
39 enihcam 2024-09-04 14:03:44 +08:00 这不是代码问题,这是管理问题。 |
40 enihcam 2024-09-04 14:04:38 +08:00 ![]() 如果老板是“能用就行”的心态,这个团队长不了。 |
![]() | 41 meeop 2024-09-04 14:06:19 +08:00 我觉得写得挺好的,逻辑简洁清晰易于维护 如果觉得这都不好,你手动封装成其他逻辑,出了 bug 你背锅就行 如果不敢这么做,这也是上一个人不这么做的原因 |
![]() | 42 toan 2024-09-04 14:11:58 +08:00 挺好,要逻辑有逻辑,要代码量有代码量,还能正常运行 |
43 |
![]() | 44 byc4i 2024-09-04 14:14:45 +08:00 看到等保测评,不知道是不是某地网安部门的外包。你这个属于泄露源码了。 |
![]() | 45 yhxx 2024-09-04 14:14:58 +08:00 曾经我也觉得看不下去 现在我也这么写 清晰易懂,更重要的是代码量拉满了 |
![]() | 46 lisxour 2024-09-04 14:15:32 +08:00 最起码一目了然,你就该偷笑了 |
![]() | 47 barrysj 2024-09-04 14:17:42 +08:00 全量 map 还是省不了的吧,顶多把 set true 那行抽出来 |
![]() | 48 wangritian 2024-09-04 14:20:03 +08:00 不考虑反射吗,真的一行行硬写 |
![]() | 49 QXDM 2024-09-04 14:27:32 +08:00 |
50 fresco 2024-09-04 14:28:17 +08:00 好奇有更好的写法吗 |
51 hekunhotmail 2024-09-04 14:29:04 +08:00 gpt 一键重构 |
52 RobertWu 2024-09-04 14:30:50 +08:00 via Android 真诚发问,反射要怎么写? |
![]() | 53 janda 2024-09-04 14:31:09 +08:00 代码和人有一个能跑就行 |
![]() | 54 opengps 2024-09-04 14:31:59 +08:00 我问下更好的写法是啥?我有过类似的经历,因为具体字段完全是现场要求的,没法提前知道,所以做成了一个批量赋值的模式,别看内容多,其实只是几下纵向复制粘贴就能出来这么多代码 |
55 NEPv5NA6R8R3Y11u 2024-09-04 14:32:22 +08:00 |
![]() | 56 daybreakfangyang 2024-09-04 14:32:29 +08:00 看着头大♂,空指针警告 |
![]() | 57 wyx119911 2024-09-04 14:44:44 +08:00 其实还不错的,很清晰。如果是我的话会改成用 switch case 优化下分支判断的性能,但大体结构保持。 |
58 ShaoLongFei 2024-09-04 14:45:34 +08:00 ![]() @QXDM 我觉得这种代码明显更糟糕 |
59 teenight 2024-09-04 15:00:48 +08:00 你行你上 |
![]() | 60 panlatent 2024-09-04 15:01:46 +08:00 ![]() 改 if-else 到 switch : title = cell.getStringCellValue() switch (title) { case "xxxx": break; } 这样可以确保每列处理方法集中在一个 case 。 对于最多的检查+隐藏操作,可以封装为一个函数来改进 if 结构: hiddenColumnIfNot(dto.getExpartColumn().getAppProject().isProjectYea()) dto.getExpartColumn() 输入起来费劲可改成一个中间变量 |
![]() | 61 plasticman64 2024-09-04 15:06:25 +08:00 说不定他的工资很低呢,收多少钱干什么活呗 |
63 gollwang 2024-09-04 15:33:24 +08:00 没人注意到这些关键词吗? 密码评测、等保、国产化 |
![]() | 64 Mandelo 2024-09-04 15:38:37 +08:00 |
65 CodeCodeStudy 2024-09-04 15:39:44 +08:00 代码很直观啊,换个人都懂 |
![]() | 67 lucasdev 2024-09-04 15:43:29 +08:00 很常见的场景,个人觉得比较“优雅”的做法是,在实体类字段上面加注解,然后通过反射来做 |
![]() | 68 x86 2024-09-04 15:44:08 +08:00 别的不说,接盘的人应该庆幸了,你见过 IDE 右边红的跟牛市一样的代码吗 |
69 NoOneNoBody 2024-09-04 15:44:18 +08:00 10 个以内判断我还可以写,10 个以上我就想用状态机了 |
![]() | 70 qiaobeier 2024-09-04 15:45:44 +08:00 不是挺工整的吗,有什么问题? |
![]() | 71 nb85144 2024-09-04 15:47:54 +08:00 能用就行了,反正最后都得变成屎山 |
![]() | 72 shiguiyou 2024-09-04 15:51:25 +08:00 读起来很易懂 |
![]() | 73 Smilencer 2024-09-04 15:57:52 +08:00 via iPhone ![]() 挺好的,应该是高手写的。 随时应对产品经理提出的改动需求,你看有些字段确实需要特殊处理,简单迅速明了。 你吭哧吭哧搞个封装啥的,改的时候有的你苦恼的! |
74 justdoit123 2024-09-04 16:08:08 +08:00 需求太多变的场景下,73# 的说法挺适用的。 |
75 Greendays 2024-09-04 16:10:35 +08:00 看代码都能想象出来 Excel 有多复杂了。这种写法可能真不算差的。 |
![]() | 76 zhangdawei 2024-09-04 16:13:30 +08:00 这样好理解 |
![]() | 77 asdfasasdf 2024-09-04 16:17:13 +08:00 我觉得挺好的一目了然,后期功能应该也挺容易修改,要是把这个再封装在一个模块那就更完美了 |
![]() | 78 pkoukk 2024-09-04 16:17:24 +08:00 每一行的检查都有略有区别,我觉得没多大问题 |
![]() | 79 QXDM 2024-09-04 16:22:30 +08:00 @yb2313 #66 没有 enumerate 这都是小事,更恐怖的是所有 write_rows 既没抽象也没做任何映射,光逻辑就快到 7 层,拉了 800 多行 |
![]() | 80 xcsoft 2024-09-04 16:25:51 +08:00 < 能跑就行了 > 真的 |
![]() | 81 itechify PRO |
82 pecsj 2024-09-04 16:36:14 +08:00 分支不多就还好,优雅不优雅另说 |
![]() | 83 cvooc 2024-09-04 16:37:38 +08:00 看起来是 excel 和 dto 之间缺失了对应关系, 一边可能是甲方提供的 excel 和 项目已有的对象, 这个明显是复制粘贴出来的, 我一眼看到 应用名称 的 case 出现了两次, 感觉用 map 的确会好很多, 这里绝大多数操作都是一样的 |
84 alexsz 2024-09-04 16:39:50 +08:00 整洁壮观,非常好懂,没毛病,真的 |
![]() | 86 bgm004 2024-09-04 16:43:02 +08:00 @ZGame 解不动,2 个 json 快 30kb 了,一个文件 6000 多行没有几行注释。echart 的配置就靠这 2 个 json 各种循环遍历,还有一堆本地数据映射。json 里全是各种金融行业术语缩写。 |
![]() | 87 woniuppp 2024-09-04 16:43:57 +08:00 按行数定 kpi |
88 nightlight9 2024-09-04 16:58:16 +08:00 @opengps 如果是我,我选择用 excel 模板写,更直观一点 |
![]() | 89 Felldeadbird 2024-09-04 17:11:16 +08:00 能跑就行了。 这业务代码基本是这样的: 老板:小明,我想要个 ABCDEFG 的导出。你去实现一下。 小明:好的老板。 老板我已经完成了。(老板应该不常用,直接硬编码导出) 若干天后。 老板:小明,GHJIT 列加一下。 小明:加完了老板(擦,半年后回来,告诉我调整这个导出,弱智老板) 如此反复。 |
![]() | 90 xuanbg 2024-09-04 17:16:24 +08:00 我导入导出都是搞个实体类,字段加注解就完了,像这种需求也一样用注解搞定。反正注解这玩意可以很多,一个搞不定就再来几个。哈哈哈 |
![]() | 91 z67nnciQnb7r8bLf 2024-09-04 17:19:58 +08:00 如果只是某个特定业务,这么写也无可厚非,如果考虑复用的话,建议优化一下 |
92 xloger 2024-09-04 17:22:46 +08:00 ![]() 就这还一堆人说好?这一排下来谁知道哪里有没有哪里有特殊逻辑,哪里直观了? 很明显,改法就是把这里的类型名和判断函数抽出来,弄个 Map 或者类似的合适的数据结构。然后特殊逻辑也拎一块,这才叫直观才叫一目了然好么? 一大堆 if else 里藏几个特殊逻辑,也好意思管这叫好代码? |
![]() | 93 git00ll 2024-09-04 17:29:17 +08:00 我觉得没啥问题,导出功能而已比较边缘的能力不需要过度设计。 而且他还写了注释,看起来一目了然,如果要改这里任何人都能马上上手 |
94 onichandame 2024-09-04 17:31:36 +08:00 挺直观的 |
95 liquid207 2024-09-04 17:33:54 +08:00 添加一个 cell name 和 dto column 的映射,可以解决大部分的重复代码。添加一个匿名函数处理 “应用服务器” 之类有特殊逻辑的 cell 就可以了。 |
![]() | 96 lasuar 2024-09-04 17:36:38 +08:00 大道至简,楼主还得再看看,不要只从技术角度看现象。 |
97 28Sv0ngQfIE7Yloe 2024-09-04 17:49:38 +08:00 |
![]() | 98 wusheng0 2024-09-04 17:50:20 +08:00 说优雅的,说得我都怀疑自己了。 哪怕你按照类型分开来组织呢 唉 |