如何建造一个系统(迭代方式)

  1. 拿到一个问题(需求),先通过分析做一个简单的模型;
  2. 将简单的模型详细化(按照软件设计层级),但不需要多漂亮,达到能完成功能即可;
  3. 按照设计快速实现一遍;
  4. 按照使用者的角度使用一遍,提出一堆需求,然后重构,然后回到步骤2,直到软件结构能够较为清晰(最高目标当然是代码及目录结构可以自解释)

软件设计层级

  1. 先从整个软件系统的用途思考
  2. 分解软件系统为一个一个的package,并且package是如何交互的
  3. 接着分解成类,每个类要有明确的交互对象
  4. 分解成子程序(Function)
  5. 最后才是实际运行的代码

分成这些样子之外还要对同等级之间的相互访问进行限制,不同等级之间的尽可能在设计上就不要相互影响

现代建筑工(码农)

构造一个系统和建造一座建筑其实非常的相似;

砖头水泥就是一个个的组件

当很多很多的砖头水泥凑到一起的时候不一定能得到一个有用的建筑,所以我们需要通过思考,让不同的建筑材料有规律的组合到一起完成一定的功能。对于建筑来说就是构建了一个可以使用并且有一定目的的建筑。

对于DigtalWorld来说就是完成了一个system。

这么看来,世界发展了这么多年,很多角色还是没什么变化嘛。。。

牛逼的只有人没有代码

先来吼一个高大上的名词,“双云异地双活”

讲真第一次听到这种名词的时候真是星星眼,一定是很牛逼的代码才能实现这么牛逼的业务,但是我要是说定时刷新配置文件+Nginx转发,估计搞开发的也就认为就那样了把,没多少技术含量。

不过我今天要说的是:双云异地双活=定时刷新配置文件+Nginx转发;

这样的方案代码不超过200行,而且在java中多数是样板代码。就能实现这样对外听起来牛逼哄哄的功能。

关键在于每一处细节都落实清楚了就能够实现。而这样的人所谓的coding能力不一定是顶尖的(写不出各种让人看不懂的算法blablablabla),但是对于细节的把控确实非常的到位。

这样的人我称之为牛人。而代码?那只是牛人证明自己的工具而已。

如何写好干净的代码

# PCMonitor
为什么要这么构造包结构:
1) 同目录之间的包应该是同级的
2) class应该调用子包和同级目录中的class
3) 给予上级目录调用的等同于对外提供方法的应该提供Interface
4) 包与包之间之间除了Interface的接口其他不可互相调用
5) 不是包外可见的方法不要增加public关键字
关于巨大的Utils类这种存在,我们可以在包的根部写一个Abstract的Utils,然后每个包中写一个Utils并继承根包下的Utils(等效于只应该调用包内的class),如果有多个包共同调用的方法可以新建一个abstract表述清楚是哪几个package要调用,并继承根目录下的Utils,同时在包内的Util继承你刚编写的abstract Utils。
Junit编写说明:
1) 每一个method编写一个Test
2) 只关注Method的输入输出
3) public方法直接调用

private方法用反射调用

4)保持整个编码过程中,Junit测试的正确性