#写好业务代码#3.工程标准化

本文集说的都是些平凡的小事,但往往是这些小事区分了产品的伟大与平庸。

1.杂谈工程标准化

(1)关于工程

任何编译构建系统,都存在“代码工程”的概念,也就是架构师所说的“代码视图”。笔者觉得Visual Studio定义的最为“形象、合理”,我们可以先从这个角度来理解代码工程:

解决方案:解决方案只是一个容器,用于包含一个或多个相关项目,以及生成信息、Visual Studio 窗口设置和不与特定项目关联的任何杂项文件。 解决方案由格式唯一的文本文件(扩展名 .sln)描述;不应对其进行手动编辑 。

项目:在 Visual Studio 中创建应用、网站、插件等时,会从项目开始 。 在逻辑意义上,项目包含所有将编译到可执行文件、库或网站中的源代码文件、图标、图像、数据文件等。 项目还包含编译器设置以及程序将与之通信的各种服务或组件需要的其他配置文件。

——MSDN

解决方案是一个容器,包含了N个代码工程。

每个代码工程是一个编译单元——可以输出可执行文件(例如:exe),可以输出动态库(例如:dll)。

代码工程之间存在依赖关系。

图1

同样,在Maven的世界、Webpack的世界也有类似的概念,只是术语不同。

(2)关于工程标准化

通常编译构建系统会定义一套标准化的脚本,供程序猿按照架构师的“设计图纸”划分代码工程,描述代码工程间的依赖关系。以Maven的POM为例:

POM stands for "Project Object Model". It is an XML representation of a Maven project held in a file named pom.xml. When in the presence of Maven folks, speaking of a project is speaking in the philosophical sense, beyond a mere collection of files containing code. A project contains configuration files, as well as the developers involved and the roles they play, the defect tracking system, the organization and licenses, the URL of where the project lives, the project's dependencies, and all of the other little pieces that come into play to give code life. It is a one-stop-shop for all things concerning the project. In fact, in the Maven world, a project need not contain any code at all, merely a pom.xml.

From http://maven.apache.org/pom.html

图2

那么,看起来“遵循脚本规范,标准化的编写就能够轻松愉快的实现工程标准化了”。

事实并非如此,现代化的软件开发分工很细(也不排除程序猿个体的学习动力),往往一个产品刚开始的代码框架、工程脚本由一个程序猿大牛搭建好的,后来者基本不用了解Maven这些编译构建系统的细节,即使日后需要用到,也只需要把以前产品的完整代码复制粘贴再删除多余的代码——笔者接触过我厂很多工作5年的Java程序猿,对Maven的理解仅停留在听说过“Maven”这个单词的水平——这的确是一个不太乐观的现实。

2.基于Maven的工程标准化

(1)看懂架构师的图纸

首先,我们来假设一种场景:“希望业务侧代码是一套,但是能够兼容不同微服务开发框架(例如:同时兼容SpringCloud和Dubbo)”。有实战经验的同学一眼就能发现这种需求场景对于“BS/微服务”系统具有一定的典型性。

再来,看看“架构师的图纸”。本文重点讲解“如何根据架构师的图纸来构建标准化的Maven工程”,不展开讨论图纸本身如何设计。

图3

core-fw/core-fw-ex:内外部三方件

sdk-platform:平台适配层的接口

sdk-platform-springboot:针对SpringBoot平台适配层的实现

sdk-platform-dubbo:针对Dubbo平台适配层的实现

db-product1:产品1的数据库层

bu-product1-feature1/bu-product1-featureN:产品1的特性1~N的single层

bu-product1-composite:产品1的组合层

bu-product1-website:产品1的View层

(2)POM编写

解决方案的POM

图4

core-fw的POM

图5

core-fw-ex的POM

图6

sdk-platform的POM

图7

sdk-platform-springboot的POM

图8

db-product1的POM

图9

bu-common的POM

图10

bu-product1-feature1的POM

图11

bu-product1-composite的POM

图12

bu-product1-website的POM

图13

源代码:GitHub

3.总结

本文通过一个典型的微服务应用系统为例,展示了如何达到工程标准化。

最后,我们用鲁迅先生的话结束本文:“规范千万条,工程第一条。工程不规范,亲人两行泪”

图14
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容