一、引言
系统架构是平常讲得比较多的词汇,但它的含义比较广,以自己的思考和实践写出系统架构系统文章,希望对大家有些启发作用。
在本文中,先讨论什么是系统,系统在百科中的解释是"系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定的结构和功能,并处在一定环境下的有机整体"。从这句话里可以提炼两点内容出来:一是整体与部分(由要素结合而成的);二是结构性(具有一定的结构和功能)。本文也是基于这两点讨论系统。
二、系统的复杂性
我们经常听到有人说"这个系统好复杂",那么系统的复杂体现在什么地方呢?
在<<面向对象分析与设计>>一书中,作者认为系统的复杂性是软件固有的特性,它的复杂性来源于问题域的复杂、管理的复杂、灵活扩展。下面以自己的经历谈谈对这三个因素的感受。
问题域的复杂: 有些业务本身是比较复杂的,涉及的用户、流程都是比较复杂的,如之前做过金融理财方面的,涉及到投标、放款、债权转让、分期还款、债权计算、结算等,里面涉及的业务场景、业务流程比较多,要确保业务的正确性,毕竟金融是涉及到钱的,错一点影响面比较大。
管理的复杂: 这个对于小型项目体现不出来,之前经历一个项目,管理者低估了项目的复杂度,认为只需求在原来的系统改一改就行,结果做到后面发现不对,有很多问题点没有考虑到,最后是All in所有的同学在做。后面思考这个问题是在平时的项目管理出了问题,一个项目的目标、结果、重要的里程碑都要有清晰,关键时间点要同步进度。所有管理也是一门艺术和技术,现在PM体现这个角色。
灵活扩展: 有些并不是一开始就是复杂的,做着做着就复杂了,主要原因是有些代码是一次性代码,有些是硬编码,重用性很低,来一次需求就要改一次,大量的 if else。
三、系统的层次性
在上面一部分讨论了系统的复杂性,的确复杂是系统的固有属性,那这种复杂性我们能把控吗?或者我们有什么手段、方法去认识复杂的系统?
经过人们长时间的观察和实践,发现系统是具有层次结构的。正是这个特性,这种层次代表的不同的抽象级别。一层构建在另一层之上,每一层可以分开理解,每一层为更高层提供服务。
分层体现了系统的结构性,像植物一样,外表可以看到根、茎、叶,通过切片可以看到组织、细胞。个人理解分层有以下好处:
分离关注点: 可以独立的研究每一个部分,如可以独立地研究根,可以不管茎。屏蔽复杂度: 在研究每一层时,只关注本层的内容,不用关心下一层的内容。结构明晰: 通过层次让整个系统变得更清晰,像写文章一样,有不同的段落。
四、小结
本文分析了系统的复杂性的因素有哪些,为了把控复杂度,发现系统有层次特性,通过分层可以更好地认识和理解系统,分层是最终的表现,层是如何推导出来的,请关注下篇文章。
如果你对java技术很感兴趣,可以加入我的java学习群(374308445)来交流学习,里面都是同行,群验证【优快云2】有资源共享。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!