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