浅谈移动应用软件的架构

  • 格式:docx
  • 大小:34.99 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈移动应用软件的架构

16软工吴文超

1.软件架构的定义

软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。软件架构设计就是从宏观上说明一套软件系统的组成与特性。软件架构设计是一系列有层次的决策,比如:功能与展现的决策;技术架构的决策;自主研发还是合作;商业软件还是开源软件。

2.为什么要进行软件架构?

2.1软件架构的目的

对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的。

1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统

的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求。架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的。

2、一定程度上缩短项目的周期,利用软件架构提供的框架或重用组

件,缩短项目开发的周期。

3、降低开发和维护的成本,大量的重用和抽象,可以提取出一些开

发人员不用关心的公共部分,这样便可以使开发人员仅仅关注于业务逻辑的实现,从而减少了很多工作量,提高了开发效率。

4、提高产品的质量,好的软件架构设计是产品质量的保证,特别是

对于客户常常提出的非功能性需求的满足。

与其他复杂结构一样,软件必须建立在坚实的基础之上。不考虑关键情况,不考虑通用问题的设计,或者不考虑关键决策的长期后果,都将置

应用于险地。现代工具和平台有助于简化搭建应用的任务,但是他们并不能代替针对特定情景和需求的细心应用设计。质量低下的架构带来的风险包括不稳定的软件,无法支持现有或者将来的业务需求,或者难以在生产环境中进行部署和管理。

系统设计应当考虑用户,系统本身(IT基础设施),以及业务目标。在每个方面,都该描绘出关键性案例,并以此找出重要的质量属性(比如,可靠性和可扩展性)以及重点满足或忽视的方面。可能的话,最好找到衡量在不同方面成功的方法和指标。

用户,业务,以及系统目标有关这三个方面的需求可能相互矛盾,因此需要达到一个平衡。妥协也是经常地事情。比如说,一个解决方案的用户体验大都关乎业务和IT基础设施上的一个功能,其中任何一个改变了也会极大影响用户体验。同样的,用户体验的改变也会极大影响业务和IT底层设施需求。性能可能是一个很重要的用户和业务目标,但是系统管理员可能无法为了百分百满足用户一次性投资那么多到硬件上,刚开始可能就是80%差不多。

架构关注于应用内的关键元素和组件彼此之间的调用和交互。单个组件的数据结构,算法或者实现细节是设计的事情。架构和设计的关注点通常相互覆盖。与其硬性区别架构和设计,不如索性放在一起考虑。一些场合下,架构用的多一些。另外一些场合下,就更在乎设计上与架构有关的事情。考虑以下有关软件架构的high-level关注点:用户如何使用本应用?如

何部署和管理此应用?此应用的质量需求是什么?安全,性能,并发,国际化,还是配置?如何设计此应用以保持持久的灵活性和可维护性?现在可能影响此应用的构架趋势是什么?

2.2软件架构所遵循的原则

1、满足功能性需求和非功能需求。这是一个软件系统最基本的要求,也

是架构设计时应该遵循的最基本的原则。

2、实用性原则,就像每一个软件系统交付给用户使用时必须实用,能解

决用户的问题一样,架构设计也必须实用,否则就会“高来高去”或“过度设计”。

3、满足复用的要求,最大程度的提高开发人员的工作效率。

3.如何进行软件架构设计?

1、分析需求和理解业务模型(或领域建模),并选定关键Use case

软件的需求,可以分为从用户视角和开发人员视角来看,从用户的角度看,又可以分为功能性和非功能性需求,我们必须从不同的视角和级别去全面的认识需求并分析需求,理解业务模型。实践表明,常常被我们忽视的非功能性需求常常会导致整个项目失败。

理解业务需求最好的方式莫过于进行领域建模,领域建模与需求分析往往是交替穿叉进行的,领域建模主要有以下三个方面的作用:

①探索复杂问题,弄清领域知识。Martin Fowler曾经说过,他采用

面向对象方法最大的好处就是它有助于解决更为复杂的问题。领域建模本身作为辅助思维的工具,帮助我们将注意力始终保持在最为重要的业务概念及其关系上,使我们能够不断深入地,系统的对需求进行分析和认识。

领域建模往往是一个从模糊到清晰,从零散到系统的过程。

②决定功能范围,影响可扩展性。任何模型都是对现实世界某种程序

的抽象,这种抽象就会忽略某一些东西,例如忽略对象的属性和对象间的关系,而这些忽略往往都是带有一定的目的性的,这种忽略就决定了功能的范围。模型揭示了各种功能背后的结构,如果说定义功能相当于“拍照片”的话,那么领域建模就相当于“做透视”,更加关注问题领域的内在

结构,相当于对问题领域进行了一定的抽象,良好的领域模型不仅能很好的支持现有的功能,而且还可以在一定程度上支持未来可能出现的新需求,体现良好的可扩展性。

③提供交流基础,促进有效沟通。领域建模通常会使用UML图作为呈现的方式,这样为我们的沟通提供了方便。当然,有时候文字在描述某些特定领域的问题时可能更适合,可以灵活运用。

在实际软件开发流程中,往往领域建模缺少这一环节,这可能是在以后的工作中需要进一步提高之处。

虽然我们总是期望架构设计师能全面掌握需求,但由于时间和精力的限制,摆在我们面前的现实就是架构设计师没有时间对所有需求进行深入分析,所以我们的策略就是“把好钢用在刀刃上”,即把大部分时间和精力花在对决定架构最重要的关键需求上。在选择关键需求时要注意:高优先级的需求往往是从用户的角度来看的,可能并不是真正的关键需求。在《RUP实践者指南》一书中向我们讲述了如何确定关键功能需求?A.作为应用程序的核心或实现了系统的主要接口的功能,B.必须被实现的功能,即如果这些功能不被实现,则开发出来的软件就失去了价值,C.覆盖了系统架构的一些方面,但没有被其他重要的Use case覆盖到的功能。

2、分别从各个视角来考虑软件架构的方方面面。

软件的架构设计必须考虑到各方面,根据前期工作确立的领域模型,关键需求,系统约束等进行设计,必须从系统用户,开发人员,系统管理员,部署管理员,数据管理员等人员的角度去分析并解决问题。比如说,如果我们的运行架构采用Cluster方式时,就必须小心Cache和Session 等的使用;如果我们的业务逻辑要求我们要操作多个数据库时,就要考虑采用支持二阶段事务提交的方式。

只有将这些方方面面的问题都考虑到了,这样的架构设计才是完整的。至于每一个视图中,我们应该设计到什么细节这一问题,实际上与整个项目的过程定义有关。例如,如果我们有专门安排数据库概要设计的活动,那我们在架构设计的过程中就可以只需要关注更高层次的数据库特性及

数据库之间的关系,而每一张表的数据字典可以在后续的相关活动中进行