先感概一句, 软件设计是一个不太容易的事情,尤其历史需要兼容新需求的问题。
软件设计
软件设计包括很多,软件架构,软件结构,数据库设计。
软件不是从0开始的,一般都会有一些支撑组件,尤其现在的web程序,会有开源的程序提供给你。而选择什么样的支撑组件,就要看你真正的需求了。速度(选择高性能算法,语言支持,增加缓存),安全性(https,ssh),计算规模(分布式),高并发(mp模型),语言环境限制等等。这些都是实际存在约束,从而在软件上有所侧重,数据库,缓存工具,提供的加密通道,VPN,基础LIB等等。
例如我们最近的项目,交互的游戏服务器实在移动的微机上,IP地址,网段都是不确定的,而且有时常搬运到各地的需求,就要有跨越网段的需求。就要使用VPN和反向代理软件。对于VPN软件,也有很多OpenVPN等。反向代理软件,用的比较多的Nginx,这个软件太火了,而且资料非常的全面。
数据库,还有一些其他的一些软件依赖。
软件结构,这个有很多课程来讲述牛人们的思想,数据结构、设计模式等等。这些数据和课程讲述了抽象的内容,比较少的描述他们的应用场景。但实际上,我们大量的学习是在这儿层面上的。有很多的东西,不是我们不会,不去理解,实在是使用的场景。而在进行设计的时候,尽量尝试一下。尝试对需求带入我们的设计模式,挑选更加合适的处理方式。
数据库设计,不用说,在很多场景中,它是最核心的内容,数据作为展示,抉择的依据,而为了更加友好的处理,分析数据。现在数据仓库也是再兴起。。
需求增加
原始的开发方式,瀑布模型。这个情况比较少,但是在实际的实施过程,一期二期三期的推进。需求也是在增加的。
现在互联网的开发选择是敏捷,迭代开发。要求开发周期短,每个周期有新的需求,但是如果遇到大的需求,跟原始设计有冲突地方,就要更改早期设计。比如我们曾经遇到PC端从服务器下载资源,资源存储方式都是md5值存放,而后期增加了模板文件的概念,文件在服务器上不能以md5方式存放,而文件有可能会发生改变。这样的话,原始设计的优化方案,同名不下载,就需要更改。
需求更改
针对需求更改,不改设计和更新代码是根本不可能的,现有理论都是在尽量少的更改设计。
历史兼容新需求
怎么办重构部分代码。重新梳理需求,对于数据库设计,最好还是尽量少的进行更改,对于它的变化基本上算的上伤筋动骨。