软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。
软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师陈述软件构架作为满足不同客户的需求的实际系统设计方案基础。
软件架构师与客户商谈概念上的事情,与经理商谈广泛的设计问题,与软件工程师商谈创新的结构的特性,与程序员商谈实现技巧,外观和风格。
软件架构是一个系统的粗略的图。软件架构粗粒度地表述了系统的构件。
它是一个系统的基础组织,它具体体现在系统的著称构件,构件之间、构件和环境间的关系,以及知道其设计和圆滑的原则上
软件架构一般来说组织成视图,如同在建筑学中的不同种类的蓝图。一些可能的视图有:
功能/逻辑视图
代码视图
开发/结构视图
并行/过程/线程视图
物理/部署视图
架构设计师的任务是整合拆分
架构设计师的目标是把代码分开,把计算机的任务分开
把人的任务分开
架构由专门的设计师来设计,设计出的蓝图交由程序员来实现。我们之所以会认为架构是设计师的工作,是因为我们喜欢把软件开发和建筑工程做类比。但是,这两者实际上是有着很大的区别的。关键之处在于,建筑设计已经有很长的历史,已经发展出完善的理论,可以通过某些理论(如力学原理)来验证设计蓝图。可是,对软件开发而言,验证架构设计的正确性,只能够通过写代码来验证。因此,很多看似完美的架构,往往在实现时会出现问题。
1.重用:人们希望系统能够重用以前的代码和设计,从而提高开发效率;
2.扩展:人们希望在系统能够保持结构的稳定的前提下很容易地扩充功能和性能,希望能够“以静制动“;
在现实中,人们已经在架构重用上做了很多的工作,工作的成果称为框架(Framework)
3.简洁:常言道,简洁就是美,好的架构一定易于理解,易于学习,易于维护,人们希望能够通过一个简洁的架构来把握系统;
一个复杂的架构不论是测试还是维护都是困难的。我们希望架构能够在满足目的的情况下尽可能的简单明了
在系统一开始很难可以建立一个完善的稳定的架构。迭代是软件开发过程中必然的一个过程,这是人的思维活动的一个必然阶段。
软件架构师实际上就是软件的总体设计师。首席设计师就是总设计师,
架构师也并非是万能的。架构师是客户需求和开发者之间的桥梁。
架构设计师的任务是整合拆分
架构设计师的目标是把代码分开,把计算机的任务分开
把人的任务分开
架构由专门的设计师来设计,设计出的蓝图交由程序员来实现。我们之所以会认为架构是设计师的工作,是因为我们喜欢把软件开发和建筑工程做类比。但是,这两者实际上是有着很大的区别的。关键之处在于,建筑设计已经有很长的历史,已经发展出完善的理论,可以通过某些理论(如力学原理)来验证设计蓝图。可是,对软件开发而言,验证架构设计的正确性,只能够通过写代码来验证。因此,很多看似完美的架构,往往在实现时会出现问题。
它是一个系统的基础组织,它具体体现在系统的著称构件,构件之间、构件
一个好的领域专家一定是业务领域的架构师,他能够给出某一个业务领域的架构,我们可以称为业务架构,只有技术架构和业务架构紧密结合才有可能真正创造出一个好的系统!
架构的本质在于其抽象性。它包括两个方面的抽象:业务抽象和技术抽象
软件的架构在软件的生命周期的全过程中都很重要,也就是说,软件开发团队中的所有人员都需要和架构打交道。因此,最好的团队组织方式是所有开发人员都参与架构的设计,我们称这种方式为全员参与。全员参与的方式保证了所有开发人员都能够对架构设计提出自己的见解,综合多方面的意见,在全体开发人员中达成一致。这种方式尤其适合于一些小的团队。