在我看来,软件架构就是一个软件的骨架,然后用代码去填充皮肉。很明显我的认识相当肤浅,且停留在表面汉语理解意思。那么到底怎样去理解软件架构和使用软件架构?
(1)架构是基于人的群居(以人为本)和一个为了提高生产力的目的(问题的本质)的一种分工处理和合并联系。我的理解是分工是模块,合并是组装,联系是组装方式。
(2)要做好架构,首先要对概念有正确的认识。也就是透过现象看本质上所要解决的问题。
(3)明白“是谁的问题,是什么问题”。首先是确定概念的主语,因为主语不同,理解不同,就像用户和技术员对待问题的想法是不一样的。开始的定位决定了整个过程是否有意义,所以问题的本质的发现和确定比解决问题更重要,而识别问题往往要区分解决方案和问题本身,需要去追根溯源。
(4)为了更好的去达成目标,也就是说得到一个更高的生产力,更高的个人利益,自然而然产生了个人扬长避短,团体依赖合作的一个现象,也就是切分。切分是把系统内时间上连续的动作,调整成时间上的并行,空间上的横向扩展的树状结果,从而更合理的利用时间和劳动力。层数越少,越利于沟通,效率越高。
(5)软件是用来模拟人和社会的。然后提供更低的成本,更高效率的生活。软件工程师的任务过重,拆分形成了软件架构,
(6)关于软件架构,涉及软件本身的业务体系和虚拟的业务体系。根据(3),首先应该确定问题的主体,问题有业务问题和计算机问题两个方向。组织架构要考虑参与角色、信息传递的损失,角色之间的协调等。软件不断拆分,形成硬件架构、代码架构、开发体系(参与人员)架构。
虚拟化业务主要步骤:学习业务知识,认识到业务所涉及的核心利益诉求;对业务进行建模,并用代码实现;学习业务所参与的Stakeholder如何和业务打交道,完成每个人的工作;业务运行结果的持久化。
(7)架构师是能够有足够的自信去克服对时间压力的恐惧,解决别人的问题,把完成别人工作当成自己最大的利益。架构师就是要去平衡别人的利益,以达到平衡别人各司其职,以达到整体最大化利益的leader。作为一个架构师,就要有比别人更多的能力,首先,语言和技术就是基本的信手拈来的工具,其次是发现问题,解决问题,平衡能力的管理能力。
(8)代码的责任有表达业务逻辑的代码和读用户提供访问并保存业务逻辑运行结果的代码。代码的架构:软件代码的相关利益人service-user的需求,Glue code-组合的调用,Business-实现业务的核心模型,Repository-数据的保存。Service拆分成service,glue code Repository。除了Business其他都不能有逻辑,也就是单一的顺序调用,不能继续拆分。
(9)业务是技术存在的前提,技术的复杂化发展,分拆成架构。
总结:学习软件架构,主要在于解决本质上的问题,以获得最大的利益;及如何合理的拆分形成架构。