谈谈程序设计的一些原则
程序的世界丰富多彩,如同宇宙中天体系统。按照粒度大小、层次结构、复杂度分为:平台(Platform) 、 系统(System) 、软件(Software)、工具(Tool)、模块(Module) 、类(Class) 、函数(Function)和语句(Statement)
然而,不管多么复杂的程序,都可以分解成一句句简单的代码。为了达到程序的目标,我们需要遵循一些设计原则和规范来编写代码。
常见的目标:
(1)稳定性
(2)高性能
(3)可扩展
(4)可移植
(5)安全
当然,对于不同类型的程序,目标的是不一样的。
例如:photoshop在可扩展、可移植、安全方面就没有chrome考虑得那么多。
对于射击类网游,网络时延是一个很重要的指标,所以前后台通讯一般不用TCP,而是采用改良后的UDP(在应用层加入了网络包丢失和乱序等异常处理)。
对于Windows系统,稳定性、高性能、安全性、二次开发、向后兼容性、多语言支持都十分重要。
对于微信,由众多子系统组成,核心功能的稳定、高性能、负载均衡、容灾、数据一致性是其要重点考虑的设计目标。
对于平台而言,数据交换等标准化,功能服务化显得尤为重要。
系统(System)
一个复杂的系统一般分为多个子系统
按照功能分为:接入层、业务层、存储层
业务层又会按照功能拆分成核心业务和周边子系统,分别用独立进程提供服务
业务层的容灾和负载均衡可通过Proxy中转服务器来简单实现
数据一致性保证:
① 尽量无状态化,保证过程不依赖当前状态
② 数据Cache使用数据库缓存机制落地到文件
③ 有状态的业务通过存储层中转
易于阅读和修改
分层设计,防止循环依赖