博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件架构概念思辨
阅读量:2496 次
发布时间:2019-05-11

本文共 1798 字,大约阅读时间需要 5 分钟。

一个词(比如“电脑”),可能并不代表一件单独的东西,而是代表了一类事物。这个一般性的表述就是我们通常所说的“概念”。

  也许读者期待一个干净利落的软件架构概念,但这不是现实。对此,Martin Fowler给出的评价是,“软件业的人乐于做这样的事——找一些词汇,并把它们引申到大量微妙而又相互矛盾的含义。一个最大的受害者就是‘架构’这个词。……很多人都试图给‘架构’下定义,而这些定义本身却很难统一。”

  软件架构概念:组成派

  关于软件架构的概念,有太多版本,这对我们的实践也造成了很多麻烦。笔者认为,可以将这些概念大致分为两大流派:组成派和决策派。

  Mary Shaw在《软件体系结构:一门初露端倪学科的展望》中,为“软件架构”给出了精致利索的定义:

  软件系统的架构将系统描述为计算组件及组件之间的交互(The architecture of a software system defines that system in terms of computational components and interactions among those components.)。

  必须说明,上述定义中的“组件”是广泛意义上的元素之意,并不是指和CORBA、DCOM、EJB等相关的专有的组件概念;“计算组件”也是泛指,其实计算组件可以进一步细分为处理组件、数据组件、连接组件等。总之,“组件”可以指子系统、框架、模块、类等不同粒度的软件单元,它们可以担负不同的计算职责。

  上述定义是“组成派”软件架构概念的典型代表,有如下两个显著特点:

  • 关注架构实践中的客体——软件,以软件本身为描述对象;
  • 分析了软件的组成,即软件由承担不同计算任务的组件组成,这些组件通过相互交互完成更高层次的计算目的。

  软件架构概念:决策派

  下面来看看RUP(Rational Unified Process,Rational统一过程)为软件架构下的定义:

  软件架构包含了关于以下问题的重要决策:

  • 软件系统的组织;
  • 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
  • 如何组合这些元素,使它们逐渐合成为更大的子系统;
  • 用于指导这个系统组织的架构风格:这些元素以及它们的接口、协作和组合。
  软件架构并不仅仅注重软件本身的结构和行为,还注重其他特性:使用、功能性、性能、弹性、重用、可理解性、经济和技术的限制及权衡、以及美学等。

  上述定义看似冗长,其实核心思想非常明确:软件架构是在一些重要方面所做出的决策的集合。

  该定义是“决策派”软件架构概念的典型代表,有如下两个显著特点:

  • 关注架构实践中的主体——人,以人的决策为描述对象;
  • 归纳了架构决策的类型,指出架构决策不仅包括关于软件系统的组织、元素、子系统、架构风格等的几类决策,还包括关于众多非功能需求的决策。

  深入解析:找准软件架构的位置

  既然窗帘是用来遮光的,为什么非要用一整块布呢?于是百叶窗发明了。

  既然建模有助于认清复杂问题,为什么非守着软件架构的“文字定义”方式不放呢?于是我们开始了下面“模型驱动”的思辨过程。

  从Shaw的架构概念开始

  “软件系统的架构将系统描述为计算组件及组件之间的交互”,Shaw的这个定义从“软件组成”角度解析了软件架构的要素:组件、以及组件之间的交互。通过UML类图,我们可以将这个关系表达得更加清晰,参见图1。如图所示,组件和组件之间可以有交互关系,图中的“交互”采用了关联类的语法。

     20073514411144.jpg  

        图1    软件架构的要素:组件、以及组件之间的交互

  Shaw的架构定义高度抽象地将软件架构概括为“组件+交互”,我们有必要举例说明之——就以大家熟悉的MVC为例吧(如图2所示):

  采用MVC架构的软件会包含了这样三种组件:Model、View、Controller。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639375/viewspace-150453/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639375/viewspace-150453/

你可能感兴趣的文章
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>