看到“架构”这两个字,其实我很郁闷,这两个字被很多人用烂了,在此我用“系统控制”来代替,以下可能包含某某大架构师说过得话请海涵
经过两个人5个月的时间(其中包括过年和我因结婚一个月没上班),我将公司后台数据挖掘系统(除核心算法之外)全部重构,上线之后没出过大问题,有感而发...
系统控制最重要的两点
- 充分的了解系统需求,需求都不了解,一边呆着去。
- 控制系统各单元的原子性---保证只做一件单一的事情!
- 类(包括类中函数)<->工程子模块<->独立的工程<->系统子模块<->系统,任何一个地方都要保证原子性,都要保证解耦合;我曾经跟同事说过一句话:我们的工作就是不停的抽象再抽象,今天我补充一句,“然后我们再来封装“;我从类到系统用的双向箭头,从类到系统实际就是我们的封装的过程,从系统到类,到类中函数就是抽象的过程;
- 封装---从类到系统,这是编码人员最需要考虑的工作,请保证别耦合!
- 抽象---从系统到类,这是架构师最需要考虑的工作,请保证粒度!
- 人人都是系统控制师
- ”控制系统因人而异“---修订”架构因人而异“
- 架构师需要考虑两种粒度:
- 从类(包括类中函数)到系统的粒度,这是毫无疑问的
- 在你团队的程序员面前以及你项目的紧要程度,你需要考虑到类级别还是工程级别?
- 任何一个程序员至少要考虑的两件事:
- 将你的子模块抽象成类、类中函数
- 将你的类封装成子模块
- ”控制系统因人而异“---修订”架构因人而异“
- 把握原子性的粒度,一句没错的废话
- 我无话可说,这完全靠经验和魄力控制
- 保证了原子性,你的系统可以经受更强烈的需求变化,你可以将你的系统变化控制到一个可以控制的最小范围
- 类(包括类中函数)<->工程子模块<->独立的工程<->系统子模块<->系统,任何一个地方都要保证原子性,都要保证解耦合;我曾经跟同事说过一句话:我们的工作就是不停的抽象再抽象,今天我补充一句,“然后我们再来封装“;我从类到系统用的双向箭头,从类到系统实际就是我们的封装的过程,从系统到类,到类中函数就是抽象的过程;
我的系统结构,以后有机会将公开解释各名字含义
- 第一块,lib
- 可开源的lib(NTL)
- 公司级的几乎所有工程都要用到的lib,与公司系统结构有关(MTP)
- 不同产品都需要用到的产品级的lib,公司特有(trainman)
- 算法lib,部分可开源,由于各公司有各公司的需求(labs)
- 第二块,工程工具
- 代码生成器,大量工程对以上lib的封装有千篇一律的代码
- 框架,不用代码生成器了,挂载个module就可以用
- 第三块,系统子模块
- 由框架或者代码生成器生成的代码加上算法lib生成的各种系统子模块
- 第四块,产品
- 将系统子模块串起来