`

软件架构(java中常见的软件架构)

阅读更多

什么是软件架构?

软件架构作为一个概念,体现在技术和业务两个方面。
从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上。

软件架构的一些基本原则:
   (1)分层原则:分层是为了降低软件深度复杂性而使用的关键思想,就像社会有了阶级一样,软件有了层次结构。
   (2)模块化原则:模块化是化解软件广度复杂的必然手段,模块化的目的就是让软件分工。
   (3)接口实现分离原则:随着软件模块化的不断深入改进,面向接口编程而不是面向实现编程可以让复杂度日趋增高的软件降低模块之间的耦合度,从而让各模块更轻松改进。从这个原则出发,软件也从微观进行了细致的规范化。

 还有两个比较小但很重要的原则:
     (a)细节隐藏原则:

      很显然把复杂问题简化,把难看的细节隐去,能让软件结构更清晰。其实这个原则使用很普遍,java/c++语言中的封装原则以及设计模式中的Facade(外观)模式就很能体现这个原则的精神。
      (b)依赖倒置原则:

     随着软件结构的进一步发展,层与层之间、模块与模块之间的依赖逐渐加深,而层、模块的动态可插拔要求不端增大。依赖倒置原则可看视为接口实现分离原则的深化,根据此原则的精神,软件进入了工具时代。这个原则有点类似于知名的好莱坞法则:Don't call us, we'll call you。


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

 

java中常见架构

 (1)MVC架构(经典三层架构)

    因为面向对象是当前最流行开发技术,且设计模式的大量使用使面向对象的走向成熟,而数据库是当前最有效的存储结构、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 的广泛应用,都将对软件的架构有非常重大的影响。

  (2)面向服务架构(SOA)

 

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

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

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

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

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

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

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

分享到:
评论

相关推荐

    java软件架构设计模式

    Java软件架构设计模式是软件开发过程中一套经过实践验证的、可复用的设计解决方案,它针对在构建大型复杂系统时常见的问题和挑战提供了指导原则。这些模式源于经验,可以帮助开发者更高效地组织代码,提高系统的可...

    java web了解软件架构

     一、了解软件架构  (一)基本概念  (二)软件架构的历史  (三)软件架构的目标  二、J2EE开发模型分析  (一)一层架构模式  (二)两层架构模式Model 1  (三)三层架构模式Model 2  (四)多层...

    java 十大软件架构,相信有一定基础的人都需要这个。

    本资源聚焦于“Java十大软件架构”,这是一套广泛应用于实际项目中的模式,对于有Java基础的开发者来说,理解并掌握这些架构模式是提升技能的关键。哈工大软件学院的这一教学实例提供了深入学习的宝贵材料,旨在促进...

    《软件架构设计文档》模板

    1. **组件(Components)**:软件架构中的基本构建块,它们执行特定功能,并通过接口与其他组件交互。组件可以是代码库、服务、模块等。 2. **接口(Interfaces)**:定义组件之间如何通信的规则。良好的接口设计有...

    java开发中型CS架构图书管理系统项目源代码.zip

    中型CS架构图书管理系统,使用maven构建原生JavaFX项目,数据库使用Oracle11g 依据软件工程规范分析设计完成的数据库系统实现课程设计,并将绝大多数SQL操作都封装在存储过程中。JDK1.8. java开发中型CS架构图书...

    java系统软件技术架构设计方案(案例).docx

    ### Java系统软件技术架构设计方案分析 #### 设计理念与目标 根据提供的文档信息,“xxx系统”的设计理念在于同时创造客户价值并提供优秀的用户体验。“xxx公司”致力于确保产品既符合用户的使用习惯,又能满足...

    java 架构设计示例文档

    Java架构设计示例文档涉及的知识点众多,通常它旨在为读者提供一个关于如何设计高效、可扩展和可维护的Java应用架构的参考。文档可能包含以下几个核心部分:需求分析、系统设计、技术选型、模块划分、接口设计、安全...

    java系统软件技术架构设计方案.docx

    【Java系统软件技术架构设计方案】 本方案主要探讨的是基于Java技术的系统软件设计,旨在创建一个既能创造客户价值又能提供良好用户体验的软件产品。设计理念上,公司着重于用户友好性和功能实用性,兼顾成本控制、...

    开源软件架构 软件架构

    本篇将围绕开源软件架构中的几个核心概念进行深入探讨,包括开源框架的复用机制、基于J2EE的轻量级软件架构、微软的Enterprise Library以及Eclipse相关框架的应用。 #### 二、开源框架的复用机制 开源框架作为一种...

    《软件架构设计》

    标题《软件架构设计》所蕴含的知识点极为广泛,它关联到软件工程的核心概念,包括软件架构的基本原则、设计模式、架构风格、方法论以及实现工具和环境等。下面将从不同角度展开详细解读。 首先,软件架构设计是软件...

    私塾在线 高级java软件架构师实战培训视频教程 阶段一 代码及目录 142-148 讲 共148讲 结束了

    本套高级Java软件架构师实战培训视频教程是私塾在线推出的系列课程,旨在提升学员的Java编程技能和软件架构设计能力。课程覆盖了142至148讲,全面讲解了从基础架构到高级应用的诸多关键知识点,以下是部分核心内容的...

    软件架构技术文档

    ### 软件架构技术文档知识点详述 #### 一、软件架构定义 **软件架构**(Software Architecture)是指导大型软件系统各个方面的设计的一种抽象模式集合。它描绘了一个系统的高级蓝图,涉及到直接构成系统的抽象组件...

    JAVA软件架构设计模式

    《JAVA软件架构设计模式》是深入探讨Java编程领域中软件架构设计的重要参考资料,它涵盖了设计模式这一核心主题,旨在帮助开发者提升代码质量和可维护性。设计模式是软件工程中的最佳实践,代表了在特定情境下解决...

    java cs架构系统参考

    Java CS架构系统是一种基于客户端-服务器(Client-Server)模型的软件架构,广泛应用于开发复杂的分布式应用程序。在Java中,CS架构通常涉及到两部分:客户端应用程序和服务器端应用程序。在这个架构下,客户端负责...

    Java架构师面试题

    Java架构师面试题涵盖了许多关键领域,包括J2EE开发、大数据处理、日志管理、权限分配、服务扩展性、负载均衡、性能...以上内容为Java架构师面试中常见的一些知识点,掌握这些知识能帮助架构师有效地设计和优化系统。

    趣味记忆5大经典的软件架构风格

    软件架构风格是设计大型复杂软件系统时所采用的组织结构或模式,它们为软件开发提供指导原则和可重用的设计模式。以下是对5大经典软件架构风格的详细说明: 1. 数据流风格:这种风格主要关注数据的处理流程,分为...

    世界著名计算机教材精选 软件架构与模式-带书签-清晰完整版

    2. 有助于提高软件的编写质量,加深对软件理论知识的理解,扩展专业视野,了解大型软件开发中的架构模式。 3. 介绍的设计模式和架构模式都配有Java语言的程序实例,模式中类和类之间的静态关系或对象间的动态关系都...

Global site tag (gtag.js) - Google Analytics