`

如何搭建优秀的软件架构

    博客分类:
  • JAVA
阅读更多

软件架构作为一个概念,体现在技术业务两个方面。
从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上。
先说一些基本原则
分层原则:分层是为了降低软件深度复杂性而使用的关键思想,就像社会有了阶级一样,软件有了层次结构。
模块化原则:模块化是化解软件广度复杂的必然手段,模块化的目的就是让软件分工。
接口实现分离原则随着软件模块化的不断深入改进,面向接口编程而不是面向实现编程可以让复杂度日趋增高的软件降低模块之间的耦合度,从而让各模块更轻松改进。从这个原则出发,软件也从微观进行了细致的规范化。
还有两个比较小但很重要的原则:
细节隐藏原则很显然把复杂问题简化,把难看的细节隐去,能让软件结构更清晰。其实这个原则使用很普遍,java/c++语言中的封装原则以及设计模式中的Facade(外观)模式就很能体现这个原则的精神。
依赖倒置原则随着软件结构的进一步发展,层与层之间、模块与模块之间的依赖逐渐加深,而层、模块的动态可插拔要求不端增大。依赖倒置原则可看视为接口实现分离原则的深化,根据此原则的精神,软件进入了工具时代。这个原则有点类似于知名的好莱坞法则:Don't call us, we'll call you。

以上这些原则奠定了我们的软件架构的价值指标。但软件架构毕竟是建立在当前技术之上的。而每一代技术都有架构模式。过去的不再说了,让我们现在就来看一下当前流行的技术,以及当前我们能采用的架构。

因为面向对象是当前最流行开发技术,且设计模式的大量使用使面向对象的走向成熟,而数据库是当前最有效的存储结构、web界面是当前最流行的用户接口,所以当前最典型的三层次架构就架构在以上几项技术的基础之上,用数据库作存储层、用面向对象来实现业务层、用web来作为用户接口层。我们从三层次架构谈起:
因为面向对象技术和数据库技术不适配,所以在标准三层次架构的基础上,我们增加了数据持久层,来管理O-R双向映射,但目前一直没有最理想的实现技术。cmp和entity bean技术因为其实现复杂,功能前景有限,已接近被淘汰的边缘。JDO及hibernate作为o-r映射的后期之秀,尤其是hibernate,功能相当完备。推荐作为持久层的首选
在业务层,因为当前业务日趋负载,且变动频繁,所以我们必须有足够敏捷的技术来保证我们的适应变化的能力,在标准j2ee系统中session bean负责业务处理,且有不错的性能表现,但采用ejb系统对业务架构模式改变太大,且其复杂而昂贵,业务代码移植性差。而spring 作为一个bean配置的轻量级架构,漂亮的IOC模式实现,对业务架构影响小,所以推荐作为中间层业务框架。
在用户结构层,虽然servlet/jsp/jstl/javaBean 能够实现MVC架构,但终究过于粗糙。struts对MVC架构的实现就比较完美,Taperstry也极好地实现MVC架构,且采用基于事件的方式,非常诱人,惜其不够成熟,我们仍旧推荐struts作为用户接口层基础架构。
因为业务层是三层次架构中最有决定意义的,所以让我们回到业务层细致地分析一下,在复杂的业务我们常常需要以下基础服务的一种或几种:事务一致性服务acid(tool:jta/jts)、并发加锁服务concurrent&&lock、池化管理服务cache、访问控制服务(tool:jaas)、流程控制服务workflow、动态实现服务IOC,串行化消息服务(tool:jms)、负载平衡服务blance等。如果我们不采用重量级应用服务器(如weblogic,websphere,jboss等)及重量级组件(EJB),我们必须自己实现其中一些服务。虽然我们大多情况下,不需要所有这些服务,但实现起来却非易事。幸运的是我们有大量的开源实现代码,但采用开源代码却常常是件不轻松的事。

随着xml作为结构化信息传输和存储地位日渐重要,一些xml文档操作工具(DOM,Digester,SAX等)的使用愈发重要,而随着xml schema的java binding工具(jaxb,xmlbean等)工具的成熟,采用xml schema来设计xml文档格式,然后采用java binding来生成java bean 会成为主要编程模式,而这又进一步使数据中心向xml转移,使在中小数据量上,愈发倾向于以xquery为查询语言的xml数据库。最近还有一个趋势,microsoft,ibm等纷纷大量开发中间软件如(microsoft office之infopath),可以直接从xml schema 生成 录入页面等非常实用的功能。还有web service 的广泛应用,都将对软件的架构有非常重大的影响。至于面向服务架构(SOA)前景如何,三层次架构什么时候走入历史,现在还很难定论。

aop的发展也会对软件架构有很深的影响,但在面向对象架构里,无论aspectJ还是jboss-aop抑是aspectWerks、nanning都有其自身的严重问题:维护性很差,所以说它将很难走远。也许作为一个很好的思想,它将在web service里大展身手。

rdf,owl作为w3c语义模型的标志性的语言,也很难想象能在当前业务架构发挥太大影响。但如果真如它所声称那样,广泛地改变着信息的结构。那么对软件架构也会有深远影响。

有关架构设计的一些忠告
尽量建立完整的持久对象层.可获得高回报
尽量将各功能分层,分块,每一模块均依赖假定的其它模块的外观
不能依赖静态数据来实现IOC模式,应该依赖数据特征接口,静态数据仅是数据特征接口实现方式之一
架构设计时xml是支持而不是依赖.但可以提供单一的xml版本的实现

从业务角度说:软件架构应是深刻体现业务内部规则业务架构,但因为业务变化频纴,所以软件架构很难保持恒定不变,但业务的频繁变化不应是软件架构大规模频繁变化的原因,软件架构应是基于变化的架构
一种业务有其在一段时间内稳定存在的理由(暂且不谈),业务内部有许多用例,每一种用例都有固定的规则,每一规则都有一些可供判定的项,每一项从某一维度来观察都是可测量的,我们的架构首先必须保证完美适应每一项每一种测量方式,很多失败的架构都是因为很多项的测量方式都发生变更这种微观变化中。

每个用例都有规则,我们在作业务用例分析,常常假定一些规则是先验的,持久稳定的,然而后来的业务改变常常又证明这种看法是错误的,然而常常我们的架构已经为之付出了不可挽回的代价。大量事实证明:规则的变化常常用例变化的根本原因。所以我们的架构要尽可能适应规则的变化,尽可能建立规则模版。

每个用例都关系着不同的角色。每一个用例的产生都必然是因为角色的变更(注意:不是替换,而是增强或减弱),所以注意角色的各种可能情况,对架构的设计有举足轻重的意义。在我们当前的三层架构里,角色完美地对应接口概念。

在一个系统里很多用例都相互关联,考虑到每个用例均有可能有不同的特例,所以在架构设计中,尽量采用依赖倒置原则。如架构许可可采用消息通信模式(JMS)。这样可降低耦合度。

现在我们谈一下业务稳定存在理由对业务的影响。存在即是合理,在这里当然是正确的。业务因人而存在,所以问业务存在的理由即是问不同角色的需要这项业务的理由以及喜欢不喜欢当前业务用例的理由,所有这样的角色都应该在系统里预留。《待续》
在架构设计中有几个原则可以考虑:
用例尽量细分
用例尽量抽象
角色尽量独立
项测量独立原则
追求简单性
这里未提供相关的例子,例子会在以后的更新时提供。

业务和模式之间的关系
业务中的一些用例之间的关系常常和一些常规的模式很相似。但随着时间的演化,慢慢地和先前的模式有了分歧。这是个正常的现象。但这对系统架构却要求非常高,要求系统架构能适应一些模式的更替。在这里我们尽可能早地注意到用例之间的相互角色变化,为架构更新做好准备.
第一部分完.

分享到:
评论

相关推荐

    架构实战 : 软件架构设计的过程

    本书从基本原理入手,介绍软件架构设计过程中涉及的一些概念、流程、方法、用到的工作产品及可重用的资源,从第6章开始,通过介绍一个具体的案例来阐述如 何定义需求、创建逻辑架构、创建物理架构。在第10章“进阶”...

    面向模式软件架构(中文版1-5卷).part3.rar

    本资料有1到5卷完整版,共5卷,5个电子书。  模式是什么?《面向模式的软件体系结构》(简写为POSA)的作者提出了一个模式的组成结构图,这个结构图紧紧地抓住了模式...面向模式软件架构(中文版1-5卷).part3.rar

    架构之美(精选版) - 健壮、优雅、灵活和易维护的软件架构是怎样炼成的?

    1.2 创建软件架构 1.3 架构结构 1.4 好的架构 1.5 美丽的架构 第2章 两个系统的故事 2.1 混乱大都市 2.2 设计之城 2.3 说明什么问题 2.4 轮到你了 第3章 伸缩性架构设计 3.1 简介 3.2 背景 3.3 架构 3.4 关于...

    软件架构师必修课

     (3)软件架构设计的特点、层次、分类  (4)软件构架的主要理论、方向和趋势  (5)软件工厂,实现软件开发的产业化  软件生命周期进程模型  (1)RUP与XP  (2)MSF  (3)Agile与CMMI  使用UML进行软件...

    面向模式软件架构(中文版1-5卷).part1.rar

    本资料有1到5卷完整版,共5卷,5个电子书。 模式是什么?《面向模式的软件体系结构》(简写为POSA)的作者提出了一个模式的组成结构图,这个结构图紧紧地抓住了模式得以...面向模式软件架构(中文版1-5卷).part3.rar

    架构实战软件架构设计的过程

    架构实战软件架构设计的过程内容简介:本书从基本原理入手,介绍软件架构设计过程中涉及的一些概念、流程、方法、用到的工作产品及可重用的资源,从第6章开始,通过介绍一个具体的案例来阐述如 何定义需求、创建逻辑...

    软件架构与设计模式实验

    软件架构与设计模式实验报告 内有创建型 行为型 结构型三种结构

    02 企业 EA -应用软件架构设计规范.docx

    应用软件 架构设计 设计规范 4.2.1 定义主题域 对业务过程模型、业务能力模型、系统用例等作出分析,参照全局数据模型,定义数据主题域及概 念数据实体,主题域的数据实体应高度相关,每项业务能力至少包含一个...

    面向模式软件架构(中文版1-5卷).part2.rar

    本资料有1到5卷完整版,共5卷,5个电子书。  模式是什么?《面向模式的软件体系结构》(简写为POSA)的作者提出了一个模式的组成结构图,这个结构图紧紧地抓住了模式...面向模式软件架构(中文版1-5卷).part3.rar

    LabVIEW软件架构设计.zip

    对于较为复杂的项目,在着手编写具体代码之前,首先要搭建出系统架构,系统架构是流程图的代码体现,好的系统架构可以大大节约系统开发和调试的时间,使得逻辑更加清晰。 常用框架包括以下几种: 1.顺序结构; 2....

    架构风格和基于网络的软件架构设计

    Roy Fielding REST web 标准的创建者,在其博士论文中首次提出REST的架构模式

    面向模式的软件架构 卷4 分布式计算的模式语言

    本书适用于软件架构师和开发人员。">标签目录,页码重排。 本书关注分布式计算系统软件的设计和实现。书中首先介绍理解本书内容所需的核心的模式概念,分布式计算的好处和挑战;然后描述如何使用分布式计算模式语言...

    架构实战.zip

    《架构实战:软件架构设计的过程》从基本原理入手,介绍软件架构设计过程中涉及的一些概念、流程、方法、用到的工作产品及可重用的资源,从第6章开始,通过介绍一个具体的案例来阐述如何定义需求、创建逻辑架构、创建...

    北京中科信软VS.NET设计模式与软件架构设计培训1

    同大家探讨软件架构设计的思想。同时我们将对微软全部的服务器产品以及桌面产品的集成特性进行介绍。第一天的课程包括: ·软件开发模型选择:XP/MSF/CMMI/Agile ·深入浅出Microsoft Solution Framework和...

    架构之美——顶级业界软件专家揭秘软件设计之美

    本书由Diomidis Spinellis等著,王海鹏等翻译,是一本讲诉架构设计之美的著作,书中介绍了什么是一个好的架构,怎样创建软件架构,什么是伸缩性的架构设计,并通过风靡全球的社交软件Facebook平台的架构距离,具体...

    高级软件架构师复习提纲

    开发基础架构;创建培训课程和文档;开发市场和销售渠道 10、完成收尾活动将产生哪些类型的文档?主要交付成果的最终版本:远景/范围文档、功能规格说明书 ; 客户/用户满意度调查;后续步骤的总结 11、常用传递...

    [面向模式的软件架构(卷4) 分布式计算的模式语言

    本书关注分布式计算系统软件的设计和实现。书中首先介绍理解本书内容所需的核心的模式概念,分布式计算的好处和挑战;然后描述如何使用分布式计算模式语言,设计真实世界中仓库... 本书适用于软件架构师和开发人员。

    高级软件架构师培训教程

    第一章 软件架构设计思想与体系创建 第二章 需求分析的核心理论 第三章 领域建模与系统行为分析 第四章 高层软件架构的设计 第五章 详细设计阶段的数据库结构设计 第六章 详细设计阶段的模块结构设计 第七章 几个...

    软件架构实践

    本书根据软件生命期的特点,分4部分进行了阐述,即预想构架、创建构架、分析构架和从一个系统到多个系统。并且,书中通过精选的案例,进行了剖析。

Global site tag (gtag.js) - Google Analytics