`
高成锋
  • 浏览: 52786 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

三层架构,MVC浅谈【三】

阅读更多

1. SSH三层架构

为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAOData Access Object)两种模式。DAO模式为了减少业务逻辑和数据访问逻辑之间的耦合,当一个持久框架被应用时,该模式将会减少业务对象和该框架之间的耦合,这样我们可以不修改业务对象而选择不同的持久层框架的实现。实际上在DAO模式中包含两种结构模式:桥(Bridge)模式和适配器(Adaptor)模式。

对表现层,我们使用 Struts ;业务层使用 Spring ;对于持久层我们使用的是 Hibernate 。你尽可以取代这里的某个框架而使用你喜欢的框架已达到同样的效果。下图显示了框架被整合起来时,从最高层次看到的视图。

应用层

许多设计良好的web应用,可以被按职责分为四层。这些层次是表现层、持久层、业务层、和领域模型层。每一个层次都有其独特的职责,不能把各自的功能与其它层次相混合。每一个应用层都应该和其它层隔离开来,但允许使用接口在层间进行通信。我们开始来看看每个层,并讨论一下它们各自都应该提供什么和不应该提供什么。

表现层

    一个典型的web 应用的末端是表现层。许多Java 开发者都知道Struts提供了什么东西。然而,太多时候,耦合代码比如业务逻辑被放进org.apache.struts.Action中。所以,我们先总结一下Struts之类的框架应该提供什么。下面就是Struts 的职责所在:

管理用户的请求和响应 提供一个控制起来将调用委托到业务逻辑和其他上游处理 将来自于抛出例外的其他层的例外处理到Struts Action 中 组装可以在视图中表现的模型对象 执行UI 校验 下面是一些经常可以使用Struts进行编码但是不应该和表现层关联的事情:

直接和数据库交互,比如JDBC 调用 与应用相关的业务逻辑和校验 事务管理 在表现层中引入这些类型的代码将导致类型耦合和维护负担。

持久层

    一个典型Web应用的另一端是持久层。这也是应用中最容易很快失控的地方。开发者通常低估了自己构建自己的持久层框架的挑战。一个定制的,内部开发的持久层不仅需要大量的开发时间,并且通常缺乏功能和难以管理。目前有许多解决这些问题的开源对象关系映射 (ORM) 框架。特别地,Hibernate 框架就允许Java中的对象-关系的持久性和查询服务。Hibernate 对已经熟悉了SQL JDBC APIJava开发者来或具有中度的学习曲线。Hibernate 的持久对象基于POJOJava群集(collections)。此外,使用Hibernate 不和你的IDE接口。下面列出了你需要在持久性框架中编写的代码类型:

查询关系信息到对象中。Hibernate是通过称为HQLOO查询语言,或者使用更有表现能力的规则API,来完成这个工作的。除了使用对象而不是表,使用字段而不是列的方式,HQL非常类似于 SQL。也有一些新的特定的HQL 语言特征需要学习;但是,它们是很容易理解和良好编写的。HQL是一种用于查询对象的自然语言,而对象,只需要很少的学习曲线吧。存储、更新和删除存储在数据库中的信息 高级的对象关系映射框架比如Hibernate支持大部分主流SQL数据库,它们支持父/子关系,事务,继承和多态。 下面是应该在持久层避免的一些事情:

业务逻辑应该置于应用的更高层中。这里只允许数据访问方法。 不应该使持久逻辑和表现逻辑耦合。避免表现组件如JSP或者基于servlet的类中的逻辑直接和数据访问进行通信。通过将持久性逻辑隔离在其自己的层中,应用将具有更加灵活的修改性而不影响到其他层的代码。例如, Hibernate可以使用其他持久框架和API代替,而不需要修改其它层中的代码。 业务层应该负责下面的问题:

处理应用的业务逻辑和业务校验 管理事务 允许与其他层进行交互的接口 管理业务级对象之间的依赖性 加入了表现和持久层之间的灵活性,以便它们不需要彼此进行直接通信 从表现层暴露上下文给业务层以获得业务服务 管理从业务层到表现层的实现

2. struts如何实现MVC

struts是java web目前最常用的实现框架。他采用mvc结构,将页面展现,流程控制和业务处理强有力的分开,结构清晰,思路明确,是进行java web的最好选择。
java web组件间的关系基本有三类:

页面跳转(javax.servlet.RequestDispatcher.forward()方法)

页面重定向(javax.servlet.response.sendRedirect()方法)

页面包含(javax.servlet.RequestDispatcher.include()方法).

其中,页面跳转只是在同一个web应用中进行的,传递的是request和response对象;重定向和包含则可以是不同的url内容。
      java web组件间的数据共享有四类:page,request,session和application,共享范围有单个页面到整个web应用,依次变大。
     struts的页面展示用jsp技术实现,按严格的mvc讲,jsp只是负责显示,不负责流程控制和数据处理;流程控制用action实现,在action的execute()里面通过return actionMapping.findForward()进行跳转,具体的业务处理是有各种java bean或者ejb来实现的。actionForm也是struts里面的一部分,目的是存储jsp页面提交的内容,供对应的action使用。

struts1.2 的工作流程

Web应用启动时加载并初始化ActionServletActionServletstruts-config.xml中读取配置信息,把它们存放到各种配置对象中。当ActionServlet接收到一个请求时,流程如下:

1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信 息。

2.如果ActionForm实例不存在,就创建一个ActionForm对象,把提交的表单数据保存到 ActionForm中。

3.根据配置,决定是否需表单验证,若需要,则调用ActionFormvalidate方法。

4.如果ActionFormvalidate方法返回null或返回不包含ActionMessageActionErrors 对象,则表示验证成功。

5.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action 如果Action不存在则先创建这个实例,然后调用Actionexecute方法。

6.Actionexecute方法返回一个ActionForward对象,ActionServlet再把请求转发给 ActionForward对象指向的JSP组件。

7.ActionForward指向的JSP组件生成动态网页,返回给用户。


Struts2的工作流程

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做 ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是 否需要调用某个Action

4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给 ActionProxy

5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action

6 ActionProxy创建一个ActionInvocation的实例。

7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦 截器(Intercepter)的调用。

8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返 回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

3. Spring MVC的实现原理

<!--EndFragment-->
分享到:
评论

相关推荐

    深入浅出谈ASP.NET三层架构

    ASP.NET三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种架构有助于提高代码的可维护性、可扩展性和可重用性。以下是对这个主题的详细...

    【ASP.NET编程知识】浅谈ASP.NET中多层架构.docx

    本文将深入探讨ASP.NET中的多层架构,包括二层架构、三层架构以及MVC模式,分析它们各自的特点和适用场景。 首先,二层架构是将应用程序分为两个部分:用户界面层和数据访问层。这种架构简单明了,用户界面直接与...

    《浅谈三层结构》示例代码

    文档"浅谈“三层结构”原理与用意.doc"可能深入解析了三层架构的设计理念,包括为何要采用三层结构、它的优点和适用场景。而"CodePackage"可能包含了实现三层架构的示例代码,可能包括ASP.NET Web Forms或MVC的页面...

    浅谈MVC架构在DotNET WinForm中的应用(C#)

    同时,文档 `浅谈MVC架构在DotNET WinForm中的应用(C#).doc` 应该提供了理论背景和详细的步骤指导,帮助我们理解和实践 MVC 设计模式。 总之,MVC 架构为 DotNET WinForm 应用提供了强大的设计思路,使得开发者可以...

    《浅谈三层结构》示例代码.rar

    标题中的“《浅谈三层结构》示例代码.rar”表明这是一个关于三层架构的讨论,并且包含实际的代码示例。这通常意味着我们将看到如何在实践中实现这一架构。 描述虽然没有提供具体信息,但我们可以推测这可能是一个...

    浅谈框架与MVC

    ### 浅谈框架与MVC #### 架构的重要性及概念 在软件开发领域,架构设计扮演着至关重要的角色。良好的架构设计不仅能够确保软件系统的稳定性、可维护性和可扩展性,还能提升团队协作效率。正如文章所述,“好的产品...

    浅谈“三层结构”原理与用意(附源码).rar

    附件中的"浅谈“三层结构”原理与用意(附源码)"文档和源码,提供了一个具体的应用实例,可以帮助读者更好地理解和实践三层架构。通过阅读和分析这些材料,开发者能够掌握如何在ASP.NET+C#环境中运用三层架构进行...

    MVC.rar_mvc_mvc CSharp_restaurant_三层 CSHARP_餐馆

    浅谈“三层结构”原理与用意.doc文档可能会详细讨论三层架构的设计原则和优点,比如提高了代码的可重用性、可测试性和可维护性。通过将不同职责的代码分开,开发者可以专注于各自领域的任务,提高开发效率。 ...

    浅谈.net三层结构原理与用意

    .NET三层架构是一种常见的软件设计模式,它将应用程序的复杂逻辑分解为三个独立的层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种架构模式的主要...

    浅谈ASPNET三层结构》示例代码

    ASP.NET三层架构是一种常见的软件设计模式,用于组织和分离应用程序的业务逻辑、数据访问和用户界面层。这种架构模式能够提高代码的可维护性、可重用性和可扩展性,对于大型项目尤其重要。让我们深入探讨一下这个...

    浅谈ASP.NET中多层架构

    - MVC与三层架构的区别在于,三层架构的UI、BLL和DAL的划分更侧重于数据处理流程,而MVC则更注重于用户交互和数据呈现的分离。 在实际开发中,选择哪种架构取决于项目的规模、需求的复杂性以及团队的组织结构。...

    浅谈“三层结构”原理与用意

    三层结构是一种常见的软件架构设计模式,它将应用逻辑分为了三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种设计模式的主要目的是提高...

    浅谈MVC设计模式(示例)

    MVC(Model-View-Controller)设计模式是一种软件架构模式,它将应用程序分为三个主要组件,以实现职责分离,提高可维护性和可扩展性。MVC模式广泛应用于Web开发,特别是在Java领域,如使用Java Servlets、JSP等技术...

    浅谈MVC框架的优点(翻译)

    【浅谈MVC框架的优点(翻译)】 MVC(Model-View-Controller)框架是一种广泛应用于Web开发的设计模式,旨在提高代码的可读性、可维护性和可测试性。本文将探讨MVC框架相对于传统ASP.NET Web Forms的一些优势。 **...

    基于.NET的网络文件存储管理系统设计与实现_文献综述

    综上所述,基于.NET的网络文件存储管理系统的设计与实现涉及到了多种技术栈和设计模式的应用,如ASP.NET、MVC模式、三层架构等,这些技术的应用不仅提高了系统的性能和稳定性,也为未来进一步的技术发展奠定了基础。

    浅谈Android官方MVP架构解读

    MVP架构的核心思想是将UI界面和数据处理分离,形成三个主要部分:View、Model和Presenter。 1. **View层**:View层是用户界面,只负责数据显示和用户交互。在Android中,通常由Activity或Fragment担当。View层不...

    浅谈JavaScript前端开发的MVC结构与MVVM结构

    MVC将应用分为三个主要部分:Model、View和Controller。 1. Model:模型层,负责管理应用的数据和业务逻辑。当Model中的数据发生变化时,它会通知其相关的View进行更新。例如,在Backbone.js中,你可以创建一个...

Global site tag (gtag.js) - Google Analytics