当前位置:首页 > 公众号精选 > 架构师社区
[导读]来源:https://juejin.cn/post/6844904142960328718|前言刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容。以及复盘了一下项目中有些复杂的业务场景,为什么没有很好的应用到设计模式。业务虽然肯定保密的,但是抛开项目,业务层面,纵...

来源:https://juejin.cn/post/6844904142960328718

| 前言

刚刚与同事开了一个分享会,笔者分享了一些了代码设计模式相关的内容。

以及复盘了一下项目中有些复杂的业务场景,为什么没有很好的应用到设计模式

业务虽然肯定保密的,但是抛开项目业务层面,纵观回顾了一下笔者以往的项目,关于设计模式代码规范问题还是有一些内容还是值得落笔和大家分享的。

| 正文

设计模式究竟是什么?

主流的说法,大致如此:

设计模式是解决可在许多不同情况下使用的问题的描述或模板,一般在OOP中最作为最佳实践的解决方案。最佳实践一词笔者在几处介绍设计模式的地方,都有看到。
但是设计模式真的就是OOP中,业务开发的最佳实践吗?首先声明笔者的观点,我是如何理解设计模式的:

设计模式是一种代码规范,不同于空格缩进这类容易被插件检测的入门规范,是一种中级代码规范,不宜被入门者理解,不易被插件所检测。

所以笔者认为设计模式是属于代码规范级别的,能不能成为最佳实践,也要看使用者。

设计模式在常规业务开发的存在感

常常在网上能看到,很多人晒自己碰到的“祖传代码”,“龟派气功式代码”,“shǐ山代码”等等。

我们不是有设计模式吗?不是有代码规范吗?

代码规范

幸存者偏差是一部分原因,只有烂代码才会被挂出来让人吐槽。

综合来看这种情况还是很多,那么是如何造成这种局面的,难道是这届程序员水平不行?

代码规范性或使用设计模式的痛点

笔者首先复盘了一些在业务开发中为什么不能很好应用设计模式的因素。

性能

在极端的考虑下,例如Java语言,设计模式面临着更多的类文件以及更多的代码

在类加载和内存使用上的成本,自然是略微高于不使用设计模式。

但是也不能一概而论,有些设计模式(如:单例模式,享元模式等)就是为了提高性能节约资源成本而出现的。

以及大多数情况下,良好的代码维护性优点要远远大于这点微小的性能开销,所以性能用了删除线。

类爆炸

虽然网上已经有各种设计模式的小Demo代码,但是还是可能会出现设计存在缺陷过度设计等情况。

复杂的设计模式,需要依靠业务建模,并不能拿来即用,甚至“生抄硬套”。

设计缺陷和过度设计,两者对开发人员都是一样痛苦的,会出现“不该用设计模式而用”,或者单纯为了”迎合缺陷的设计模式”,写出对应逻辑复杂的代码,这样类爆炸不可避免。

而且,就算正常使用的设计模式在业务复杂情况,类爆炸也不可避免。比如策略模式,如果业务情况就是有很多,你也必须把每个情况实现类写出来。

这就对开发的时间成本有一些细微的影响了。

甚至据笔者所知,有些传统公司,或者对日项目,几乎一个类要有一个Excel文档,详细说明类和其中元素的作用。

你可能和我想的一样,找个javadoc的api,逆向从注释生成Excel不就完了吗?

但实际上这类公司大多数还是靠人力完成这些工作的,类的数量多了起来,对维护文档的人也是巨大挑战。

团队成员编码水平

在传统的软件公司,出于节约成本考虑,很难做到人员全部“高配”并且能够有自驱动的精神。

通常都是1拖N的人员配备,想让薪资寥寥的初级工程师就有“高内聚低耦合,以及开闭原则为代表的设计模式六大原则等”这类的设计思想,也是有点难为情。此处说句题外话,而且很多初级工程师其实对框架很“有适应性”的,当然并非真正的适应性

比如:如果代码里没有统一异常处理,那么时间长了你就会发现,到处都是自己的try catch

再比如,项目里没有引入工具类库,那么时间长了你就会发现,到处都是网上奇怪的util类,甚至每个类中都有重复的工具方法。

这些不能算是初级工程师的问题,要归结于技术负责人,比如观察到了项目中还没有工具库,那么是不是应该先去公司内部的二方库中寻找,如果没有是不是应该引入commons-lang3,hutool,guava这类的第三方优秀库等等。

项目大环境

我们生存在一个高度架构为主的流量时代。高并发,大流量,各种微服务,以及中间件建设等等已经是主流趋势。

那么代码层面的设计模式以及代码规范性的地位,就有些微妙了。

笔者也见过不少项目,架构师只去考虑是不是该“加机器,加中间件,加配置”等上层建设。由于团队成员水平断档,对代码的要求几乎为0,也没有review等规则,能实现即可。

时间成本与敏捷开发

在敏捷开发场景,业务频繁变动,项目快速迭代,这当然也是因素之一。

比如常说的可以优化if else策略模式,如果初期只有一个分支,你会用设计模式吗?那么需求变动加了一个呢?如果又加了一个呢?

什么时间点选择使用设计模式优化代码,或者用不用优化,以及有没有时间优化都是个问题。

通常有经验的工程师,一般不会说出“这不就一行代码嘛,一分钟改完”这样的话。

毕竟修改代码,要思考全局性(是否其它代码也有相同修改需求),正确性,以及分支影响性(是否影响其他逻辑的执行)。

甚至也有公司对覆盖率测试类有要求,所以用打字速度判定需求落地速度,并不是业内人士的经验之谈。

这样时间成本也成为了一个因素。

人员流动

人员流动在互联网不是一个稀奇的事情。

一方面是公司原因,随着改革春风吹满地,已经到了遍地“老板”的年代,一些公司,要求不合理,甚至条款都是违fa行为导致人才流失。

二是个人原因,水平高为高薪所走,水平低被低薪劝退。

那么不管那种原因,在人员频繁流动下,代码质量要想做好,对管理上也是一种挑战。

毕竟如果你接手一个逻辑复杂的龟派气功代码,业务逻辑还没完全清晰的场景下,大多数人会老老实实的添加if else以完成需求。

| 分析

代码规范

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭