关于工程规范的思考

323 阅读6分钟

软件质量的问题

软件质量一直是大家关注的问题,我们常常看到的很多三年以上的工程领域模型混乱、架构分层不合理、项目工程边界划分混乱、重复功能多。

导致这种情况的原因很多,需求变化快、代码审核机制不完善,不过我们追其根本原因,发现大多都是人的问题。人员流动快,人的软件水准参差不齐,在我跟很多大厂的朋友聊天,他们也一致的反馈了很多一致的结果,业务系统代码的逐步腐化,很整洁的业务系统很少。

更多的,我们看到很多这样的现象,一个技术复杂度简单的系统,却需要很多人去维护,对于开发者而言要7*24小时的救火,对于管理者来言,简单的功能上线的投入越来越大,如何规避这种问题呢? 上面我们说这些问题是人引起的,那解决这些问题就要在人上去解决,如果你用心发现,你会发现这样一个问题,团队与团队之间的差距是巨大的,如果一个学习氛围浓厚的团队,他们的技术输出能力,沉淀能力与其它团队相比差距是巨大的。

那怎么去解决人的问题呢,招聘比自己优秀的人,这是一个简单高效的方法,优秀的人总是能感染到一部分人,互相形成氛围。但是如果你带的是一个历史的团队,该如何去做?首先我觉得要建立大家的软件的审美。建立大家的热情,建立共同的约束、共同前行沉淀文化。

我一直认为写代码、写作和绘画,所有这些创造的过程是基本类似的,第一位的是你要有正确的审美,第二你要有创造的热情,第三制定规约砥砺前行。最后慢慢沉淀思想的结晶和技术文化。人员的流动是控制不了的,但是思想的沉淀却如同给后边的人留下了巨人的肩膀。

工程纪律的实施

工程纪律实施的方式有很多,可以参考性质的,比如阿里出的java开发手册以及附带的idea的检查工具;也可以是强制性的,比如在代码合并的时候增加代码规则检查,如果不通过不能进行分支合并或者上线。也可以引入考核方式,比如对代码的质量进行评测,对每个组代码的坏味道和测试覆盖率进行每周的统计,我们通过大量的实施发现这些宽松的或者强制的检查,虽然初期可能是不适的,但是日益积累对技术人员的影响却是巨大的,他实实在在影响了技术文化。

这里我只讲一下一些工具和脚手架的实施方式,因为这是最简单的方式,他不需要太多讲述,却可以实实在在的提高队伍的生产力,最好推行。

让研发人员去看文档,他大多不能完全按文档的规范来,但是如果你给他一个开箱即用规范框架,并且提供相关约束的样例,他大多会按照这个样例进行粘贴和修改,从而保证了代码的统一和规范。那脚手架应该有哪些内容呢?

• 架构分层 一定要提供一个良好简单的分层架构,这里要根据当前团队的情况进行选择,比如公司技术氛围很强,大家对DDD又很熟悉,就可以使用DDD的分层方式,如果大家还很传统,可以使用传统的三层架构。

• 基本的编程规范,可以通过demo的代码还有基础工具类的代码,最大程度的对整洁代码提供一个可参考的案例,包括sql语句的规范、xml的规范、日志的使用规范。

• 提供技术选型的约束,内置必选的组件,提供可选的组件。

• 提供开箱即用的组件,比如springboot生态下的starter,有些自研的组件(定制的中间件、权限组件等)并没有在spring生态下,可以实现自己的拓展,提供开箱即用的功能。并通过stater来统一管理。

• 对各种类型的工程提供模板,比如支付领域中的账务。面向后端我们一般要有一个服务中心,承载的是该工程的后端服务。面向商户我们一般要有一个商家管理端,面向支付公司公司运营我们一般要有一个运营管理端,面向用户我们要有一个门户,面向app我们一般要有一个app端,并且我们一般要有一个网关来对app端提供服务这些工程所提供的功能不同模板不同,就名称而言,以上的工程类似于如下的命名。accounting-center accounting-shop accounting-man accounting-portal accounting-app accounting-gateway。

• 代码可增量,比如说我要增加一个rest服务接口、通过sql可生成基本的增删改查等。

用什么做脚手架

业内有的用Maven的archetype, 用freemarker写一个web版本,用lazybone命令行交互工具,今天这里不介绍这些,介绍另一个可选的并且特别好用的工具。大家可以体验一下,然后感受一下其中的不同。 先来看一下他的效果,然后我们再看怎么用

通过命令yo unionstars 运行你的脚手架模板,然后让你选择Spring Boot的版本,这里我默认是2.1.8.RELEASE.

输入基础的包名,这个地方我输入的使com.unionstars

输入打包的方式,用上下键切换,用空格去选中。此外你可以控制很多可选的组件,按需所取。比如选择权限组件、中间件组件等

启动工程,然后就得到了一个带登录登出的基于AdminLTE的web服务工程

脚手架就说到这里,下边是我发布的一个脚手架的组件,大家可以体验一下,欢迎跟我沟通和交流。如果需要源码,也可以加我好友提供。 www.npmjs.com/package/gen…

你可以通过 unionstars.github.io/ 联系我。