给大家观摩一下,给我看傻了
![]() |
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
5sheep 2024-09-04 14:13:33 +08:00 ![]() 我对这段代码的评价是:满意
|
![]() |
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
retrocode 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
说优雅的,说得我都怀疑自己了。
哪怕你按照类型分开来组织呢 唉 |