如何真正写出高内聚低耦合的代码?如何使代码符合巴拉巴拉原则?

白花蛇
• 阅读 3964
巴拉巴拉原则代指各种使代码更优雅的原则

写代码的人都希望代码整洁漂亮,也肯定搜索过不少文章,想要学到高内聚低耦合、开闭原则等等等等心法。但是真正动手开始写时,把自己知道的各种技巧都用上,却总觉得代码并不符合这些原则。使人无端产生一种挫败感:我懂得了这么多道理,却写不出好代码。

因为这是一个量变产生质变的过程。只有当你画出最后一笔,你画的人才看起来是个人。有一个单词不认识和所有单词都不认识是没有本质区别的,但是全部单词都认识的那一刻,就突然可以理解整句话了。只有当你键盘下的代码的方方面面都足够好,你的代码才是真正符合巴拉巴拉原则的。

而网上的大部分文章只会告诉你什么是巴拉巴拉原则,却对如果做到闭口不谈。

要做到这一点,必须审视自己写下的每一行代码:

  1. 嵌套的if else好吗?
  2. 能不能不过于依赖if else来实现流程控制?
  3. 状态变量定义在方法外,是否导致程序的语义更模糊了?
  4. 这个for循环能否用函数时变成代替?
  5. 能否用函数柯里化简化参数传递和方法调用?
  6. 能否用闭包使逻辑更内聚力,避免逻辑分散在不同方法中?

    ……

    等等等等

无数个这样的小技巧组成了符合巴拉巴拉原则的代码。

每一次应用这些小技巧,都导致代码的巴拉巴拉指数增长了一点。当应用了世界上所有的这种小技巧时,就能写出巴拉巴拉指数满分的代码。

也就是说,这是一个积累的过程,当积累到足够多的小技巧时,代码就会趋于完美。

毕竟,连大厂如Facebook,从mixin到High order component到render props到Hooks,连他们都在挣扎寻找实现巴拉巴拉原则的技巧。广大业务代码编写人员觉得迷茫,更是很自然的事情。

不过,不同于上面列举的例子,也存在一些会显著影响代码质量的技巧。

目前前端框架,把数据和UI分开。更改数据,UI就会自动更新。这里面缺少了框架作者不会关心,业务代码编写人员却天天面对的一块:业务逻辑写在哪里?

以Vue为例:

写在Vue的组件里会导致业务逻辑和UI强耦合,并导致业务逻辑被迫按照页面的不同被分散在不同的UI组件中。

导致目前最常见的代码写法,不仅不符合巴拉巴拉原则,反而符合反巴拉巴拉原则。

正确的做法应该是UI组件里只存在UI相关的逻辑。业务逻辑全部写到Vuex里面,UI组件只负责发布action和mutation高速Vuex改更新了。

这样做,UI组件会自然按照设计师的设计分散在不同的组件里。业务逻辑也会按照产品的设计分散在不同的Vuex模块里。而且,因为高内聚的业务逻辑代码,原本由于低内聚高耦合代码导致的难以维护不复存在,写新需求、debug过程会变得十分自然。

具体写法,可以去看看Vue-element-admin模版源码。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
九路 九路
4年前
Java实现 一篇文章说尽设计模式之六大原则
我们知道,设计模式很有用,学好设计模式不但能让你写出更简洁,优雅的代码,还能使得代码的结构更清晰,也更有利于扩展当然设计模式也不是万能的,一成不变的.设计模式只是前人总结出来的一种经验,一种特定问题的解决方法,不能看作是死的东西不一定非要生搬硬套,非得按照设计模式书上来来,只要我们写的代码符合一定的一些原则,一样可以看作是自己的模式.但是前人总结
zdd小小菜鸟 zdd小小菜鸟
2年前
设计模式面试
设计模式面试1.单例设计模式使用设计模式为了代码复用,增加可维护性。设计模式的六大原则:开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则(最少知道原则)、合成/聚合复用原则Singleton(创建):保证一个类仅
待兔 待兔
3年前
彻底弄懂类设计原则之 - 开闭原则
类设计原则之开闭原则OCP,OpenClosedPrinciple,中文翻译为开闭原则当第一次看到OCP时,我就蒙了,什么开,什么闭啊,完全摸不到头脑然后就去网上找各种博客,各种解释,最多的一种就是:对扩展开放,对修改关闭当时我就更蒙了,去问了很多“高手”,他的回答让我更加迷茫:不修改代码就可以增加新功能这是多么神奇的事啊,不修改代码
Wesley13 Wesley13
3年前
DDD领域驱动设计实战
整洁架构、CQRS、六边形架构等微服务架构都旨在“高内聚低耦合”。那DDD分层架构又如何?1DDD分层架构1.1分层架构的基本原则每层只能与位于其下方的层发生耦合。1.2分层架构的分类严格分层架构(StrictLayersArchitect
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
Java 面向对象的设计原则
一、1、面向对象思想的核心:封装、继承、多态。2、面向对象编程的追求:  高内聚低耦合的解决方案;  代码的模块化设计;3、什么是设计模式:  针对反复出现的问题的经典解决方案,是对特定条件下(上下文)问题的设计方案的经验总结,是前人设计实践经验的精华。4、面向对象设计原则
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
让代码优雅起来:记一次代码微重构实践 | 京东云技术团队
重构不仅能够提高代码质量,让代码优雅起来,同时也能让我们学以致用。我们所学的设计思想、原则、模式等理论知识,往往在重构中能够真正实践。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
linbojue linbojue
1年前
史上最全的后端技术
系统开发1.高内聚/低耦合高内聚指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。模块的内聚反映模块内部联系的紧密程度。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方