4

过度设计是罪恶的!

 2 years ago
source link: https://developer.51cto.com/article/706945.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
过度设计是罪恶的!-51CTO.COM
过度设计是罪恶的!
作者:小姐姐味道 2022-04-19 20:51:20
在制定规范和标准的时候,大家都习惯兼容并包,照顾所有的业务线,做上一份。但在实践中,这种标准的问题通常问题多多,为业务方造成许多的困扰。

软件开发的哪个阶段最容易招人喷?如果你严格按照什么瀑布模式、敏捷模式开发的话,你会发现永远是概要设计的评审阶段。

b97f9ba38a501457671654168e5dd32d2f4d8f.jpg

这个时候,虽然还没有成为既定的事实。多位理想主义达人,就会搬出各种规则、规范,来给你的方案下套子。

他们是为了你的方案更好么?大多数情况未必。有的人,多说几句是为了凸显自己的价值;有的人是刚看了几本书,感觉不吐不快;还有的人,本身就是完美主义者,看不得你的方案有任何瑕疵。总结下来,完美主义者还是有点作用的。

但当你把开发任务扔给这些指挥和挑刺的人,你会发现他们大多数不仅仅实现不了自己给套上的套子,连最基本的功能实现都是问题。

每当这时候,我内心都会大喊:让这些假洋鬼子去死吧!

组件替换问题

如果我们的技术栈,选用的是MySQL,我们会采用JDBC、MyBatis、JPA等一系列的基础的编码工具。但这种选择,对追求接口和实现分离的同学来说,却是不可忍受的。

这些人会搬出无数的理由,来说明,如果不加入一个中间层的话,代码是无法复用的。他们追求的是,如果你将来把数据库从MySQL切换到ElasticSearch,那么你几乎不需要改动任何代码。

“你有没有想过?如果你ES也不用了,把数据存储在Hbase中呢?”

这也是操蛋的DDD所追求和说明的,把一个简单的数据库操作给拆的七零八落。

如果把这种设计哲学推广开来的话,你会发现几乎每个地方都有问题。

项目中使用了Kafka,如果将来换成Pulsar呢?项目中使用了Http,如果将来要换成Socket呢?最让人担心的是,项目中使用了Java语言,如果后面使用Golang呢?是不是也要发明一个第三方语言来规避语言的差异?

值得注意的是,Spring家族在这些完美的目标上,产出了不少优秀的组件,比如Spring Data、Spring Cloud Stream等。

但这不代表你可以过度设计。因为用来屏蔽实现的这部分实现,本身就是风险的存在。

耦合有错么?

只要需求落在代码上,就一定会产生耦合,想要去除所有的耦合,那是根本不可能的。

在开发中,你为什么不想着为开发语言的耦合创造一个第三方语言呢?这个成本是大的,而且是非常没有必要的,如果真的有这种需求,你可以把它放在重构上。

同样的话,我也可以送给纠结底层数据库存储的同学。一旦你做了某个决定,想要完整的抽象就变的非常的奢侈,它不会比更换开发语言有更少的工作量。

这是一种思维惯式,也是一个度的问题。

在评审会议上喷一下非常的爽,但没有人会多想一想背后的工期、需求和必要性。

但如果放任耦合无限制的产生,显然也不是我们想要的,这个度的度量需要一定的学问。

内部技术和外部协作

我觉得冲突产生的根本原因,是评审者甚至开发者,没有弄清项目的边界是什么。

拿SpringCloud来说,只要定义好Feign接口的协作方式和规范,把文档写好命名做好,另外一个团队并不是很关心你后面到底是Java写的,还是挂了个sidecar的Golong程序。

再拿消息队列来说,全公司定下了Kafa作为数据交换的通道,虽然它没有JMS这样的协议兼容,你也不会蛋疼的去封装一层去兼容。大家默认Kafka的Topic/Partition机制,并基于这样的特性调整代码。

至于我的后端数据库,是用MyBatis去处理,还是用JPA去处理。是MVC三层模型,还是直接把SQL写在Controller里。只要这些是我的私有数据,外部团队永远不会用到的话,任何人都没必要对其指手画脚。

只要边界问题处理好,就不会产生大的乱子。

一刀切,在公司技术部门懒政的环境中,普遍存在。

在制定规范和标准的时候,大家都习惯兼容并包,照顾所有的业务线,做上一份。但在实践中,这种标准的问题通常问题多多,为业务方造成许多的困扰。

人要因材施教,规范也应该区分环境。制定规范的人活儿多一些,执行的人,生活就快乐一些!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK