当前位置:首页 > 单片机 > 架构师社区
[导读]来源: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以完成需求。

| 分析

代码规范

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭