使用open source产品组装你的web应用架构(一) 转载

转载 2004年09月10日 21:02:00

使用open source产品组装你的web应用架构()<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

其实,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。 在构架的一开始就有很多事情要考虑。 从高处看,摆在开发者面前有很多问题:要考虑是怎样建立用户接口?在哪里处理业务逻辑? 怎样持久化的数据。 而这三层构架中,每一层都有他们要仔细考虑的。 各个层该使用什么技术? 怎样的设计能松散耦合还能灵活改变? 怎样替换某个层而不影响整体构架?应用程序如何做各种级别的业务处理(比如事务处理)?

 

构架一个Web应用需要弄明白好多问题。 幸运的是,已经有不少开发者已经遇到过这类问题,并且建立了处理这类问题的框架。 一个好框架具备以下几点: 减轻开发者处理复杂的问题的负担(“不重复发明轮子”); 内部有良好的扩展; 并且有一个支持它的强大的用户团体。  好的构架一般有针对性的处理某一类问题,并且能将它做好(Do One Thing well)。 然而,你的程序中有几个层可能需要使用特定的框架,已经完成的UI(用户接口) 并不代表你也可以把你的业务逻辑和持久逻辑偶合到你的UI部分。  举个例子, 你不该在一个Controller(控制器)里面写JDBC代码作为你的业务逻辑, 这不是控制器应该提供的。  一个UI 控制器应该委派给其它给在UI范围之外的轻量级组件。 好的框架应该能指导代码如何分布。 更重要的是,框架能把开发者从编码中解放出来,使他们能专心于应用程序的逻辑(这对客户来说很重要)。

 

这篇文章将讨论怎样结合几种著名的框架来使得你的应用程序做到松弛耦合。

如何建立你的架构,并且怎样让你的各个应用层保持一致。?如何整合框架以便让每个层在以一种松散偶合的方式彼此作用而不用管低层的技术细节?这对我们来说真是一种挑战。  这里讨论一个整合框架的策略( 使用3 种受欢迎的开源框架)  :表示层我们用Struts 业务层我们用Spring;而持久层则用Hibernate 你也可以用其他FrameWork替换只要能得到同样的效果。 见图1 (框架组合示意图)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-4-111615320.gif

 

应用程序的分层

大部分的Web应用在职责上至少能被分成4层。 这四层是:presentation(描述),persistence(持久),business(业务)和domain model(域模块)。每个层在处理程序上都应该有一项明确的责任, 而不应该在功能上与其它层混合,并且每个层要与其它层分开的,但要给他们之间放一个通信接口。   我们就从介绍各个层开始,讨论一下这些层应该提供什么,不应该提供什么。

 

表示层(The Presentation Layer)

一般来讲,一个典型的Web应用的的末端应该是表示层。 很多Java发者也理解Struts所提供的。 象业务逻辑之类的被打包到org.apache.struts.Action. 因此,我们很赞成使用Struts这样的框架。

 

下面是Struts所负责的:

     *  管理用户的请求,做出相应的响应。

     *  提供一个Controller ,委派调用业务逻辑和其它上层处理。

     *  处理异常,抛给Struts Action

     *  为显示提供一个模型

     *  UI验证。 

 

以下条款,不该在Struts显示层的编码中经常出现。 它们与显示层无关的。

     * 直接的与数据库通信,例如JDBC调用。

     * 与你应用程序相关联的业务逻辑以及校验。

     * 事物管理。

在表示层引入这些代码,则会带来高偶合和麻烦的维护。

 

 

持久层(The Persistence Layer)

典型的Web应用的另一个末端是持久层。这里通常是程序最容易失控的地方。开发者总是低估构建他们自己的持久框架的挑战性。系统内部的持续层不但需要大量调试时间,而且还经常缺少功能使之变得难以控制,这是持久层的通病。 还好有几个ORM开源框架很好的解决了这类问题。尤其是Hibernate Hibernatejava提供了OR持久化机制和查询服务, 它还给已经熟悉SQLJDBC API Java开发者一个学习桥梁,他们学习起来很方便。 Hibernate的持久对象是基于POJOJava collections。此外,使用Hibernate并不妨碍你正在使用的IDE

 

请看下面的条目,你在持久层编码中需要了解的。

*  查询对象的相关信息的语句。 Hibernate通过一个OO查询语言(HQL)或者正则表达的API来完成查询。  HQL非常类似于SQL-- 只是把SQL里的tablecolumnsObject和它的fields代替。 你需要学习一些新的HQL语言; 不管怎样,他们容易理解而文档也做的很好。 HQL是一种对象查询的自然语言,花很小的代价就能学习它。

*  如何存储,更新,删除数据库记录。

*  Hibernate这类的高级ORM框架支持大部分主流数据库,并且他们支持 Parent/child关系,事物处理,继承和多态。

 

业务层(The Business Layer

     一个典型Web应用的中间部分是业务层或者服务层。 从编码的视角来看,这层是最容易被忽视的一层。 而我们却往往在UI层或持久层周围看到这些业务处理的代码,这其实是不正确的,因为它导致了程序代码的紧密偶合,这样一来,随着时间推移这些代码很难维护。幸好,针对这一问题有好几种Frameworks存在。 最受欢迎的两个框架是SpringPicoContainer 这些为也被称为microcontainers,他们能让你很好的把对象搭配起来。 这两个框架都着手于‘依赖注射’(dependency injection)(还有我们知道的‘控制反转’Inversion of Control=IoC)这样的简单概念。 这篇文章将关注于Spring的注射(译注:通过一个给定参数的Setter方法来构造Bean,有所不同于Factory, Spring还提供了Setter Injection(type2)Constructor Injection(type3)等方式供我们选择。  Spring把程序中所涉及到包含业务逻辑和DaoObjects——例如transaction management handler(事物管理控制)、Object Factoris(对象工厂)service objects(服务组件)——都通过XML来配置联系起来。

 

后面我们会举个例子来揭示一下Spring 是怎样运用这些概念。 

业务层所负责的如下:

* 处理应用程序的 业务逻辑和业务校验

* 管理事物

* 允许与其它层相互作用的接口

* 管理业务层级别的对象的依赖。

* 在显示层和持久层之间增加了一个灵活的机制,使得他们不直接的联系在一起。

* 通过揭示 从显示层到业务层之间的Context来得到business services

* 管理程序的执行(从业务层到持久层)。

 

 

域模块层(The Domain Model Layer

既然我们致力于的是一个不是很复杂的Web的应用, 我们需要一个对象集合,让它在不同层之间移动的。  域模块层由实际需求中的业务对象组成 比如, OrderLineItem , Product等等。 开发者在这层 不用管那些DTOs,仅关注domain object即可。 例如,Hibernate允许你将数据库中的信息存放入对象(domain objects),这样你可以在连接断开的情况下把这些数据显示到UI层。 而那些对象也可以返回给持续层,从而在数据库里更新。 而且,你不必把对象转化成DTOs(这可能似的它在不同层之间的在传输过程中丢失),这个模型使得Java开发者能很自然运用OO,而不需要附加的编码。

使用WebSocket构建实时Web应用

使用WebSocket构建实时Web应用 随着时代的进步,传统的网页技术已经无法满足人民群众日益增长的物质文化需求(误)。对于一些特定的需求,如消息推送、在线聊天等,往往受限于BS架构的特性而没...
  • baidu_zhongce
  • baidu_zhongce
  • 2015年06月04日 22:42
  • 617

基于AWS云服务的Web应用架构

高可用和可扩展的web应用是复杂而昂贵的。密集的高峰时段和流量模式的剧烈波动导致昂贵的硬件利用率低下。Amazon 云服务为web 应用提供高可靠的,可扩展的,安全的高性能基础设施,同时保证了弹性,根...
  • wireless_com
  • wireless_com
  • 2015年02月01日 09:22
  • 2030

浅谈web架构之演化过程

前言 最近在开发过程中,遇到很多缓解配置的问题,工程很难启动,也不知道为什么环境需要这么多配置的意义。就在这个时候,一本好书《大型网站技术:核心原理与案例分析》给我带来全新视角,必须强势安利一把...
  • kingice1014
  • kingice1014
  • 2016年08月04日 14:06
  • 504

浅谈Web网站架构演变过程及各阶段所用的技术和架构设计

前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: 用户模块:用户注册和管理商品模块:商品展示和管理交易模块:创建交易和管理 阶段一...
  • he90227
  • he90227
  • 2016年03月04日 10:12
  • 3647

大型web系统架构详解

(如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力。本博客会逐步推出一系列的关于大型网站架构、分布式应用、设计模式、架构模式等方面的系列文章)   动态应用,是相对于网站...
  • zhulongxi
  • zhulongxi
  • 2017年06月21日 14:41
  • 847

failed to open file mysql,导入mysql数据库打不开的解决办法

使用mysql导入数据库时很不凑巧的出现: Failed to open file 'xxx.sql', error: 2 主要的原因在于mysql没权限读取你指定导入盘符的权限。 so 我们此...
  • zch501157081
  • zch501157081
  • 2016年05月09日 11:15
  • 3591

基于WEB/SSH架构技术

基于WEB/SSH架构技术 基于WEB/SSH架构技术         Web应用程序使用HTTP作为核心的通信协议,也被称为基于WEB的应用程序。随着WEB系统复杂度的提高,应用服务器程...
  • shenghuaDay
  • shenghuaDay
  • 2016年06月05日 22:38
  • 725

11款常见的Web应用程序框架

11款常见的Web应用程序框架
  • YaoXTao
  • YaoXTao
  • 2014年09月13日 19:01
  • 1787

产品开发的组织架构和开发管理

摘要:产品开发的组织架构和产品开发过程管理是一个软件企业开发管理的两个侧面,开发组织架构指软件项目的立项和项目开发有效的人员调配和组织,开发过程管理指在项目确定后,软件开发过程的管理。本文根据作者在建...
  • liubing8609
  • liubing8609
  • 2013年07月17日 22:04
  • 1548

23种设计模式分析(2):创建型模式

fadfd
  • zhoudaxia
  • zhoudaxia
  • 2014年04月04日 17:50
  • 1769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用open source产品组装你的web应用架构(一) 转载
举报原因:
原因补充:

(最多只允许输入30个字)