正文
01
关于软件架构(
Software Architecture
),这其实也是仁者见仁,智者见智,不过,现在早就有了一个国际标准了,我所使用的这些概念全都来自国际标准。
国外软件架构的书有很多,有卡耐基梅隆大学的,那个作者好像是美国国防部军事软件的供应商,这个大学好像外包了美国的很多军事项目。
不过这本书讲的项目都是军事项目,我相信我们软件技术人员是没有搞过搞军事项目的。我们更多搞的是企业应用软件的开发。那么,在军事领域里面他的那些术语,很多是和我们软件开发过程中的术语是不一样的,因此,我不会太多的涉及这本书的内容,当然了,虽然我无法用他书的概念来谈关于架构的问题,但它的那里面的很多方法也是可以参考的。
What’s
Software
Architecture?
软件架构,也可以称为是软件系统结构,或者说软件实际上是软件系统的一个简称。
它最核心的一个方法论,是面对真正的需求,去寻找到一个架构,从而能够平衡(balance)的完成这个需求。
02
让我们先来看看,这个软件是个什么东西?
What’s
Software
?
软件是什么?
Software is a general term used to describe a collection of
computer programs
, procedures and documentation that perform some tasks on an
operating System.
这个软件它是用来干什么的呢?
它是一个计算机的程序,然后呢,是这样的一个集合或者一个收集物。要让这个程序通过系统上执行一些任务,就是一个执行过程,从操作系统的眼光看,它是运行在操作系统上的很小的一个局部的过程。
那什么又是软件系统呢?
What’s
Software
System?
The term software system is often used as a system of
computer program
or
software
.
A software system is a system based on software forming part of a
computer
system(a combination of hardware and software).
The term software system is related to the application of systems theory approaches in software engineering context. This approach is often used to study large and complex software, because it focuses on the major components of software and their interactions.
The term software system is also related to the field of
Software Architecture.
我们再来对软件系统做一个更深刻的说明,软件系统这个术语,它常常也是一个计算机程序。或者软件的一个同义词。
一个计算机系统包括了硬件、软件。当我们讲一个软件架构的时候,我们要跟硬件与软件,粘在一起吗?软件架构,要需要映射一个组织的架构吗?
核心问题是,
软件有一个架构
。先有架构,然后软件,
又有一个语境
。那我们现在直观的看到软件要部署在硬件上,这样构成了一个计算机系统,而这个计算机系统,需要运行在一个企业里面的,它首先要映射一个企业。这是我们的两个核心。
一个软件系统在一个企业里面,要包括四个部分,软件,硬件,组织,信息。
当然了,对于智能手机来说,智能手机只是一个载体,它上面运行的操作系统原理是一样的,上面的软件开发使用的方法论和开发模式是一样的。
智能手机上的软件,也是属于我们这个课题的研究范围。智能手机上的那个也是运行在标准下的计算机程序。
软件系统有哪些分类?
Major Categories of Software Systems:
Application
software/
Programming
software (Development Tools)/
System
Software
问题,我们研究哪一种类型的软件?
03
介绍一下软件体系结构核心概念和关键图像。
Architect
(架构师) 名词/
Architecting
(构架) 动词/
Architecture
(架构,体系结构) 名词
Architect
performs
Architecting./Architecting
results
in Architecture./Architect creates Architecture.
他们的关系是,架构师
架构
体系结构。那,什么是架构师呢?
What is An Architect?
System
stakeholder(涉众)
responsible for a system’s architecture.
负责系统体系结构的系统利益干系人(
涉众)
。
我们研究哪一种类型的系统?架构师有哪些种类?其主要职责是什么?
04
软件架构它首先放在了一个软件工程的语境里面,它最重要的目标就是
提高它的模块的通用性,以及关注点的分割,通过这两个核心的手段,来降低软件的复杂性
,这是软件工程中要解决的重中之重的问题。
Approach,我把它译成一个途径。达到一个目标你有很多途径,在一些条件的限定下,你获得一种对各种资源的平衡(比如项目管理中,
资源时间成本
,三者互相统一又互相矛盾的关系),你再去选择一条适合你的一种途径。
各种类型软件系统都有一个架构。它是系统里面,一个有效的组成部分,这就把我们的范围在逐渐缩小,逐渐限定。我们首先要选择一下我们的方向,我在文章中谈论的是,应用软件的架构。
软件一定会有一个架构,不管你有没有意识到,这个架构一定存在。那我们研究架构的时候需要考虑,是哪一种类型的架构,让我们做一种选择,我们先下决心去选择,然后再确定我们研究的是应用软件,那应用软件也会有很多呀,我们到底要做什么,我们最终要选择的是做一个application,在企业的环境中,去做了一个企业级的应用。
这样一系列的选择,用的这个方法,其实是非常的复杂,因为,你要进行取舍,最后才确定你的方向。然后呢,你还要找到一个架构,来达到一种很好的平衡,这样才算理解了前进的方向。
05
架构师通过他的思考与设计,构建了一个符合要求达到标准的软件架构。
注意,我们的主语和谓语,我们现在的目光要聚焦在谁在干这个事儿,不是如何干,也不是干成的结果是什么,也不是就等着这个结论与结果,然后用一个东西把它描述一下。
很多人,把架构理解成了一种结果性的东西,比如系统文档,然后通过这些文档,就理解了这种文档后的系统交流的语言,这个方向其实有点问题,搞成了反推机制,也就是说我们开发好一个软件后,然后解释这个软件是如何产生的,反过来再解释这个软件的架构,而不是把架构理解成一个动态过程,是一个前期的设计过程,这其实已经搞反了。
我们有时候,会看到软件工程中有很多的蓝图,这其实是设计上的东西。
而这三者的关系是,
架构师通过执行构架这个活动,然后设计实现了一个架构。
06
但很多时候,架构实际上是三个要素,斗争与评价,甚至是迭代的动态平衡后的一个结果。
首先是一个技术面临的实现因素,你在企业里面呆久了之后你就会知道,架构,首先是政治斗争的结果,然后是经济斗争的结果,再然后才是技术选择的结果。