谈及架构,源于建筑。
一想到建筑,就能想到一块空间,有墙,有门,有窗。
用墙围住的一块密闭的盒子空间,通过门窗与外界保持沟通。
空间内根据住户的生活需求不同,划分为各个房间,有不同的功用。
然后人们对建筑的需求也就越来越多,空间的切分也会变成很多种,组合的方式也会有很多种。当要去设计这些建筑的时候,架构师就发挥作用了。
做好架构,首先需要做的就是识别出需要解决的问题
建筑进行如此复杂的设计有什么用呢?提升住户的生活质量,满足住户的生活需求。
纵观远古到今,人类从原始居住方式(住山洞,住在树上)到现今居住摩天大楼中,这一过程也是根据了人类需求的变化而变化。
(1)过去是人类生活的环境有很多不好因素(猛兽的攻击,风吹雨打),就创生了修建隔离空间的设施,那时候的建筑很简单,只是单纯解决这些问题;
(2)到后来人类群居生活,区分物质财产、个人隐私之类的问题,修建的房子变得坚固,有了围墙;
(3)到如今,和平年代,人口骤多,地域狭小,建筑以纵向扩张,形成了高楼大厦,人们以密集的方式居住,随着物质生活的发展,个人的居住空间的需求也就提高了,房间的形式安排关系到住户的生活质量。
不同时期有着不同的问题,了解到了需要解决的问题,才能有方向地去找解决方案
利益的调整
人们对需求的期盼,也就涉及到了人自己对利益的获取。
软件架构师最核心的考虑就在于此了:考虑涉众的利益。
考虑涉众的利益,进行对人的利益的调整。
具体一点,对员工的分工调整、对客户利益调整。
服务的对象,都是人,都以人为本,让各方达到利益最大化。
问题的方向
软件实际上就是把现实生活模拟到计算机中,并且软件是需要在计算机的硬件中运行起来。
具体一点:
(1)要思考业务在没有这个软件的支持下,它所进行的流程是什么样的,而软件的介入,能带来什么改变,真的解决问题了么(提高工作效率,降低成本)?
(2)软件是在硬件的基础上进行的,需要哪些硬件设施才能满足软件的要求,软件能否进行后期扩展壮大。(能否实现软件功能、如何实现、能否可持续地发展)
软件计划
基于上面的几个方面,就可以制定一些计划去完成:
一、虚拟化义务:
1、学习业务知识,了解业务运作的流程,有哪些权利和责任,如何满足利益诉求。(了解)
2、对业务进行建模,清晰整个业务结构。(构建理解)
3、学习涉众如何与业务进行交流的,了解交流渠道。(交流)
4、如何将业务运行的结果持久化,更长久地发展。(发展)
二、代码如何运营:
1、需要哪些硬件设备完成软件功能。
2、代码要分成多少组件部署到哪些硬件设备上。
3、代码与代码之间如何通过硬件设备进行连接。
4、能否通过部署新增机器的方式扩大对业务的支撑。
5、硬件设备失效时,是否影响用户对软件的访问。
6、能否对软件进行数据采集,帮助后续业务发展。
三、角色安排
1、安排哪些角色来完成如上所列的事情
2、如何保证角色之间的交流不会有损失,如何快速纠正
3、角色是如何协调,来共同完成任务
代码的功用
当面对软件的功能时,我们需要将其解析,在代码这一层面上,将功能细分两个部分。
所要考虑的是:承担的责任。
(1)逻辑
(2)数据
简言之,什么地方是面向用户的,什么地方是进行运算判定的,什么地方是存储数据的。它们各自承担的责任是最好是单一的。
比如一个网页,面向用户的部分,最好就只是单一的用户界面,没有运算(因为运算会让用户加载网页变慢),而运算就只需要甩给后台,有关的数据只需要给数据库。否则,这样一个代码杂乱的系统,若遇到的问题就可能是修改一处,牵动所有。
架构师
(1)作为架构师,首先心中有个观念:解决别人的问题。
不再以完成自己工作为目标,而是以完成别人工作当成自己的最大利益。
(2)当在解决问题的时候,要考虑涉众的利益:问题不解决,谁会有利益的损失;问题解决了,谁会有收益,谁的收益最大。
(3)将技术作为工具来解决问题,采用长期总体成本最低的方案,不要着眼于眼前的短期成本。
——————————————————————————————————————————————————————————————————————————————————
本文只是我读了《架构漫谈》后的理解,《架构漫谈》并没有讲解有什么具体的架构方案,但以建筑作为引子,从软件的发展谈到了软件的构架,方面很多,内容略杂,却易理解。
前半部多为解决一些需求,架构师从宏观角度所要考虑的问题,考虑涉众利益、考虑真正问题、考虑解决方向。
以生活中的网络支付为例,以前付现金,有着付现金找零钱的问题,忘了带钱的问题,带钱麻烦的问题等等,买家麻烦,卖家也觉得麻烦。手机人人都有,人人随身都带,那就在手机上添加支付功能。这下,一个手机就可以游玩全城。
后半部为软件上讲解,软件在什么硬件上运行,怎么运行,用什么技术,安排什么角色,代码怎么安排等。
以我自己编写的网页为例:初学网页时候,就直接将用户界面和数据运算写在同一个页面,问题也就多了,运行慢,修改一处,就要牵扯到其它功能的代码,BUG也不易发现,总的来说,就是为了完成功能而形成的大杂烩,什么菜都有,但无味、无相。
软件架构师是什么呢?以大体的来说,他掌控着整个大的方向,知道什么地方采用什么技术,知道真正的问题所在,知道要达到的目的,在众多利益矛盾中寻求平衡。