大家好,我是一名不那么纯粹的 coder ,平常也会使用 Java 开发时,做过几个网站,对 spring boot 、tomcat 的使用基本熟悉,数据库什么的也都会用。
今年自己独立开发一个网站的时候,在对某个功能点进行实现时,成功使用工厂策略模式把这个功能模块的逻辑给抽象出来了,好像这是我第一次使用设计模式优化自己的代码。所以想来 V 站请教一下大家能够将功能抽象成设计模式这一能力在 Java 开发中算是什么水平?
最后,感谢大家的指点。
1
cmdOptionKana 2022-09-07 19:57:28 +08:00
想问一下,你问这个的目的是什么,如果是找工作,那真正能力其实权重不高,学历、工作经验之类的反而影响更大。
|
2
sun2920989 2022-09-07 19:59:13 +08:00
刻意练习一招一式,随手使出一招一式,不局限于一招一式.
|
3
sadfQED2 2022-09-07 20:01:03 +08:00 via Android
刚毕业水平
|
4
fzdwx 2022-09-07 20:03:02 +08:00
有手就行?
|
5
zzzzz001 2022-09-07 20:04:07 +08:00
工作 5 年+ 从来没刻意搞过设计模式,可能我太菜了
|
6
wanacry 2022-09-07 20:05:15 +08:00 via iPhone
培训班水平
|
7
dwlovelife 2022-09-07 20:05:25 +08:00
工厂模式很简单,难的不是抽象成工厂模式,难的是在什么场景应该抽象成什么样的模式,这样的抽象能力一时半会拥有不了,得有大量的项目试错,还得有人教和带,你要非要问我是什么水平 初级吧
|
8
sun2920989 2022-09-07 20:07:30 +08:00
不扯淡了,说点正经的.仔细思考以下问题:
是否严格按照设计模式的规范进行了实现. 实现后,整体的层级发生了哪些变化.抽象之后在什么场景下会得到哪些好处. 与此同时,又有哪些缺点. 所以本次抽象是否是适合当前项目的.要不要改回去. 所以这个设计模式的规范标准里为何是这样定义的,进行了哪些取舍. 我以后应该在什么场景下使用这个,什么场景下不适合使用. 然后将类似上面这些思考推广到其他的点上. |
9
LeegoYih 2022-09-07 20:27:09 +08:00
有代码参考吗
|
10
optk OP @cmdOptionKana 问这个的目的是想知道自己 Java 学习的怎么样,有没有走错路子,想更深入的吃透 Java 编程,只是对编程比较热爱。
@sun2920989 sun 大佬说的感觉很好,我之前都没有抽象的经验,但是也没有刻意练过设计模式,网上也有很多的教程,汽车工厂之类的抽象。我这次在编码的过程中,感觉必须要有一种设计把这些冗余的代码给消除掉,然后我就查询有哪些设计模式刻意为我所用,有点像套公式一样,最终感觉抽象工厂+策略能很好地解决我的问题,既解决了代码臃肿的问题,又使得这个功能模块具备良好的扩展性。所以我对这次的抽象印象比较深刻。 |
11
optk OP 我本人是对编程比较热爱,没有找工作的压力,所以非常感谢大家的赐教。
|
12
securityCoding 2022-09-07 20:47:19 +08:00
多看看相关的开源项目,看多了自然就知道如何抽象代码了
|
13
lostberryzz 2022-09-07 20:57:59 +08:00
大概是斗宗强者的水平吧
|
14
mango88 2022-09-07 21:12:20 +08:00
show me the code
|
15
Leviathann 2022-09-07 21:25:10 +08:00
如果是热爱
那建议直接 Rust |
16
cmdOptionKana 2022-09-07 22:23:43 +08:00
@optk
编程没有统一的发展方向,比如深耕算法,就足够耗尽全部时间精力,如果做一些基础库,算法方面就不用学太深,但要读各种标准细节,如果做应用 App ,就变成要花时间学人机交互、相关行业的业务,另外还有游戏、安全攻防等等…… 一般来说,一个人研究不了太多个方向,选择一个方向,去尝试做做,自然就知道缺什么、要学什么。 |
17
RedBeanIce 2022-09-07 22:24:16 +08:00
个人理解,对于很多业务 Javaer 来说,很少沉下心去研究设计模式与业务的结合。
很多时候是没时间,也是没必要,,楼主和工作的 javaer 来说是不同的路,,, 如果光说设计模式,不说其他的基本功的话,感觉是中级水平? 但是水平这个东西,无法很好的进行评价,不喜轻喷 |
18
11232as 2022-09-07 23:24:21 +08:00
初级工程师阶段吧,推荐看一下《 Effective Java 》,我想对你会有很大帮助。设计得话我推荐可以看一下《企业应用架构模式》和《 Unix 编程艺术》,个人觉得两本都很棒。
|
19
optk OP 非常感谢大家,show me the code 没法实现了,也不是什么好代码,没有值得看的,这篇帖子主要想说一下自己第一次使用设计模式优化了代码的体会。
@securityCoding 开源项目代码也看了一些,天天都是瞪眼大法,就像 @sun2920989 说的,没有办法做到实际写的时候信手拈来。 @Leviathann 我目前还是想等把 cglib 、aspectJ 这两块啃下之后,再去学习新的编程语言,我希望自己在编程这块,不仅仅做到会用。 @cmdOptionKana 老哥说得很好,想要全能比较难,不是人人都是稚晖君,软硬件通吃的是个狼人,我的想法比较简单就是我既然学习 Java 学习几年了,多少把 Java 这门语言吃透。但是如果说一个方向的话,我认为 Java 不应该属于一个方向,它顶多算一个方向的工具。方向的话是希望自己在开源领域能够有所建树。 @RedBeanIce 非常感谢 readbeanice 对我的评价,我最后写这个什么水平也有点虎扑搞笑的梗在里面,对于我而言什么中级初级这些都不是关键的,能够写出来高质量的代码是我比较追求的事情。(笑哭 |
20
Leviathann 2022-09-08 00:00:59 +08:00
@optk
cglib 除了写某些大量依赖反射的库用到的时候翻一下 api ,正经人谁没事看这个玩 而且现在已经不维护改用 bytebudy 了 事实上现在的趋势是非必要不反射,尤其是后 graalvm 时代,高版本 jdk 增加了各种反射的限制,强化封装性 另外如果真的有心开源,认真的说好久没见过有什么 java 相关的值得一提的开源作品了 都是 rust go js/ts python java 在国外的定位很明确,就是给大公司搬砖的 个人作品没见几个人用 java 的 |
21
cmdOptionKana 2022-09-08 00:18:41 +08:00
|
22
tonymua 2022-09-08 09:18:24 +08:00
出去面试看下 就知道了
|
23
goalidea 2022-09-08 09:20:46 +08:00
Talk is cheap. Show me the code.
|
24
DefoliationM 2022-09-08 09:49:35 +08:00
谢邀,应届生水平
|
25
q474818917 2022-09-08 10:23:02 +08:00
写 java 不需要动脑子,在座的所有 javaer 水平都一样
|
26
someonedeng 2022-09-08 10:29:22 +08:00
不用去培训班的水平
|
27
yeyuefeng 2022-09-08 11:53:31 +08:00
境界水平由低到高,依次可划分为:
初学乍练——初窥门径——登堂入室——融会贯通——炉火纯青——登峰造极——极境之上——神乎其神——摩柯无量. 初步判定你已经到达 "融会贯通" 境界水平了 |
28
optk OP @cmdOptionKana @Leviathann 你们说的有道理,用具体的业务去引领学习应该会快一点,还有想请教一下,开源项目如何更好的参与进去,之前也看了一些项目,但是不知道从哪一点入手开始提交代码。
@tonymua 你说的也有道理,以后没事儿的话随便找两家面试一下,开开眼界。 |
29
pzpzpzpzpz 2022-09-08 15:59:33 +08:00
几年后 看到这些代码 下意识 卧槽 这垃圾代码谁写的 low 爆了 点开 git 提交 发现是自己 那没事了。。
|
30
xhldtc 2022-09-08 17:22:24 +08:00
人生苦短,我用 python 。不是工作强制要求,没必要用 java 做开发,写写自己感兴趣的代码,用能够快速实现的语言写不香吗,java 那套太笨重了。最近就有感受,之前在 python 里解析 excel 一行就搞定,迁移到 java 要写几十行,太痛苦了
|
31
ZSeptember 2022-09-08 18:14:51 +08:00
还停留在语言层面,最多初级吧。
|
32
cmdOptionKana 2022-09-08 18:40:39 +08:00
@optk 我觉得有两个途径:
1. 在自己使用软件或库的过程中,发现了 bug, 然后研究一下看能不能解决 2. 我们日常都会使用大量的开源软件或库,挑几个自己特别喜欢的,然后去看看有没有 issues, 有的话就可以去帮忙。也可以 fork 一份出来自己添加新功能。 刚开始,fork 一份出来自己搞,或直接自己开新项目比较好,因为不用看别人脸色。如果给别人的项目提交代码,一般来说要先大量看看别人的讨论,了解该项目的文化,以免沟通不愉快。 |
33
optk OP |
34
akakidz 2022-09-09 09:23:23 +08:00
看你的描述只有初级水平,对于自学的建议:切记避免长期闭门造车!!
|