今天Relax君想跟大家聊聊软件架构设计方面的内容,很多程序员小伙伴们都将架构师或者技术专家作为自己的职业发展目标,但是大家有没有想过这样的一个问题呢?如果现在让你给你们公司将要开发的一个新产品做一个架构设计或者系统分析,你将会从哪些方面去思考呢?大家不妨先花个两三分钟好好想一想这个问题。
Relax君不准备直接聊这个话题,让我们先聊一下生活中大家都比较熟悉的一个场景--盖房子。有人肯定会说Relax君,你要聊房价我还是挺感兴趣的,但是我是一个程序员,你跟我聊盖房子干啥啊,哈哈,别急,且听Relax君下面慢慢道来。
如果上面的问题大家没啥思路,那我们就把这个问题换成盖房子,如果让你设计建设一个小区楼盘,你会从哪些方面去考虑。Relax君想了一下,觉得可以从这样几个方面去考虑:
1、确定小区的地理位置及周边环境,它在哪座城市哪个区的具体地方,楼盘周围是什么样的环境,旁边是否有学校、地铁、医院等等。
2、确定小区的组成要素以及具体分布,组成要素包含比如小区楼栋、配套幼儿园、绿化带、广场、停车场等等,还有这些组成要素各自分布在小区的具体位置,以及小区的出口分布,消防通道的设计等等。
3、确定2中每个要素的构造,比如楼栋的朝向、入口,一梯两户还是两梯四户等等。
4、确定使用的建筑材料,钢筋、混凝土、水泥、石灰和沙子等等。
5、确定小区的户型设计,是别墅还是复式,是高层还是低层等等。
6、确定小区外部资源的接入以及废物排出,天然气、电力、自来水以及电信网络的接入,生活垃圾和污水的排出等等。
7、确定6中资源接入的具体线路,比如天然气管道从小区到每家每户的铺设线路。
好了,就列这么几条吧,下面还是回到我们最初的问题上,就是进行软件架构设计时,我们应该从哪些方面去考虑。Relax君就顺着盖房子的思路去想一想:
1、确定小区的地理位置及周边环境---那我们是不是得考虑一下我们这个系统或者产品运行时所处的位置以及上下游对接的系统呢,比如一款网络产品,它处在网络的哪个位置,与之相连的网络设备有哪些。
2、确定小区的组成要素以及具体分布---那我们是不是得考虑一下我们这个系统的一个整体组成,现在的系统大多都是分布式的,我们这个系统可以分成哪几个子系统,每个子系统之间是如何对接工作的,系统需要提供哪些接口与外部对接。
3、确定每个要素的构造---那我们是不是得考虑一下每个子系统的内部功能的划分以及对外的接口。
4、确定使用的建筑材料---那我们是不是要考虑一下每一个子系统能够被划分成哪些组件,由每个组件去完成一个最最基本的功能。
5、确定小区的户型设计---那我们是不是应该考虑一下系统的硬件部署,任何一个软件系统都是依赖于硬件平台的,我们的系统是放在嵌入式平台还是x86服务器上,是分布式部署还是集中部署。
6、确定小区外部资源的接入以及废物排出---那我们是不是得考虑一下系统的输入活动或者说是自身任务,一个系统最基本的输入最少有两个,一个是用户的管理,因为软件系统必须需要管理员的配置操作,另外一个就是系统完成自身功能需要的输入,比如摄像头的输入就是声音和图像,网络设备的输入就是报文,还有一个就是系统本身自发设定的系统任务,比如某些定时任务等等。
7、确定6中资源接入的具体线路---那我们是不是得考虑一下,当系统从外界接受到某种类型的输入时,系统内部的子系统之间或者组件模块之间是如何协同处理这个输入的,也就是说对于某个特定的输入,系统内部模块的处理流程是怎样的。
上面的类比肯定有不严谨的地方,Relax君只是希望通过这种方式去引发那些希望日后走架构师或者技术专家路线的程序员小伙伴的思考,如果你看完这篇文章能开始思考这个问题或者能认同这篇文章中的哪怕是部分观点,Relax君写这篇文章的目的就达到了。
好了,软件架构设计之思想篇就聊到这儿了,后面Relax君还想通过几篇文章再深入的聊聊这个话题,敬请关注。
我是Relax聊技术(微信号: Relax_Tech),一个专注于分享程序员优质技术资源的公众号。微信搜索Relax技术或者扫描下方二维码关注我吧。
网友评论