`

转载:谈J2EE架构分层:业务逻辑层不是转发器

阅读更多
    此文乃好文,转之。
    原文:http://www.cnblogs.com/xiaoluojava/archive/2010/05/07/1729992.html
    我们今天来谈谈J2EE架构分层---主要想谈的是业务逻辑层不是转发器。
  在Java EE的开发中,我们一直强调J2EE架构分层,什么MVC三层体系,N层架构,好像只有架构分层越多,系统就越完美,才能体现出现代软件工程的优点。最近一直在思考,我们为什么要分层?分层的意义何在?怎样去组织各个层次的关系?
       架构分层的好处就在于代码清晰,结构分明,有利于修改、维护和复用,这已经成为大家分层的一个最有说服力的原因。但是也并不是任何系统都要分层设计,简单的系统,可以选择较少的层,反而可以开发效率和系统运行的效率。特别在需求不断更新和未知的web开发中,架构分层也并不能给我们带来多少实质性的好处,反而增加的复杂度而不能及时响应需求。
       但在大型的企业级开发中,我们通常要进行架构分层设计,而表现层、业务逻辑层、数据操作层是我们最普遍的层次划分,如下图所示。在表现层上,我们已经习惯了MVC的体系,常使用Struts,JSF等框架。而在MVC的体系中C是其中的核心,我们在这里用Action来表示,它处理客户端发送的请求并根据业务的流程进行转发。而实际的业务处理,则交给Service处理。我们常使用Spring、EJB去做这一层的架构。而数据持久层,JPA的标准,Hibernate、Toplink等ORM框架已经被我们越来越多的使用。
  在J2EE架构分层体系中,我一直在思考,谁才是核心,哪一层才是系统最关注的部分。当然大家都很明白,业务才是系统核心,一切随业务的变化而改变。但是在实际的开发中,我却看到很多这样的现象,包括发生在自己身上的。我们过多的关注了表现层和DAO层,业务的变更最直观的体现是表现在页面上,表现层的变化是必须得,但是表现层的变化更多的体现在流程的变化。我们也经常喜欢去过度的处理DAO层,业务的变更直接体现到SQL上的变更,一个个业务逻辑被翻译成一条条复杂的SQL语句。而这些导致的结果是什么,Service层成为可有可无的鸡肋,它存在的意义完全成了连接Action和DAO的简单桥梁。以下代码确实反映了这个问题。
public A saveA(A a){
    return this.aDAO.saveA(a);
}
public List<A> getAs(String a,String b){
    return this.aDAO.getAs(a,b);
}
……

我们在开发的时候,虽然划分了Service层,但是这只是对DAO的简单调用,Service成了绝对的轻量级。有时候页面上需要一个几十行的list,只是由于分成了几块展示,而我们经常按照这几块去一次次的查询数据库,而不去试着让Service调用一次数据库取到所有的记录,然后通过一定得策略去分解这些记录。难道企业的开发只是数据库的操作?Java的运算性能难道只体现在SQL的优化上?这样的架构分层还不如不分,业务层也没有必要。
还是让我们回归Service的本来面目吧,让我们将action和DAO的部分功能向Service转移吧。Action只负责接受请求,调用具体的Service,进行处理后转发;DAO可以使用更精简的,更通用的方法处理所有数据的持久和查询,只需要封装最基本的增删改查就OK了。让Action和DAO尽可能的轻量级,只关注本身,而非业务。让业务层来处理更多的内容吧。如下是业务处理的方法。
public void saveA(A a){
    //保存前某业务逻辑的验证,如数据合法性检查,业务规则验证
    this.aDAO.saveA(a);
    //保存完想JMS发送消息,通知用户已经处理
}

有人认为架构分层不好是因为一个地方改变,需要维护好多层,其实这是没有有效的使用架构分层,DAO和action层存在了过多的业务逻辑的处理,业务的改变当然会造成动一处而牵全身的后果。关注Service层,解放action和dao,保持action和dao的高度稳定性,利用稳定的业务接口和IoC等松散耦合的处理进行层层的交互,让程序人员更多的关注业务本身,而非其他的繁枝末节,这才是我们架构分层的目的。
但是在开发中的确面临着这样的问题,除了复杂的业务逻辑,Service中必不可少的需要简单的增删改查的简单调用,怎样才能让Service从中解放出来,让我们更多的关注真实的业务操作,这是下次要思考和讨论的问题。
分享到:
评论

相关推荐

    J2EE架构的信息查询系统的研究与应用.pdf

    ### J2EE架构的信息查询系统的研究与应用 #### 摘要 随着互联网技术的不断发展,信息查询系统作为网络环境中的一项重要应用,面临着多样化的挑战。特别是在异质网络环境下,如何构建一个高效、灵活且易扩展的信息...

    基于Struts,Hibernate和Spring的J2EE架构研究

    ### 基于Struts、Hibernate和Spring的J2EE架构研究 #### 一、引言 随着互联网技术的发展和企业需求的日益多样化,软件开发领域面临着越来越多的挑战。为了解决这些问题,J2EE(Java 2 Platform, Enterprise ...

    Struts_Hibernate和Spring的轻型J2EE架构的研究.pdf

    1. **表现层**:主要由Struts框架实现,负责接收用户的请求并将这些请求转发给适当的业务逻辑处理组件。Struts框架中的`ActionServlet`充当控制器的角色,而`Action`类则负责调用模型中的方法,更新模型状态,并帮助...

    中科大软院J2EE期末复习资料

    - **业务层**(Processing Layer):也称为业务逻辑层,其主要职责是对请求进行处理,执行相关的业务逻辑。 **为什么需要分层?** - **解耦**:通过分层可以将业务逻辑与表示层分离,使得系统更加模块化,易于维护...

    基于SPRING构建J2EE框架

    J2EE的分层架构通常包括表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)以及可能存在的服务层(Service Layer)。MVC模式是J2EE中最常用的表现层设计模式,它...

    j2ee 平台下的分布式项目管理模型及实现

    基于J2EE平台的分布式项目管理系统采用了分层架构设计,具体分为四层:模型层、视窗层、控制层和数据库层。 - **模型层**:负责处理业务逻辑,通常采用EJB组件实现。 - **视窗层**:使用JSP技术实现用户界面,向...

    基于J2EE在线考试系统的设计与实现

    该在线考试系统采用了J2EE平台的三层架构设计,包括Web服务层、业务逻辑层和数据访问层。这样的分层设计有助于实现系统的高内聚低耦合,便于系统的扩展和维护。 ##### 3.2 Web服务层 主要负责处理客户端的请求和...

    基于J2EE的B2C电子商务系统开发.zip

    首先,J2EE架构提供了多层模型,包括客户端层、Web层、业务逻辑层和数据访问层。这种分层设计有助于提高系统的可维护性、可扩展性和可重用性。 1. 客户端层:通常包括浏览器端的JavaScript、HTML和CSS,以及可能的...

    j2ee做的一个项目

    这个项目体现了J2EE开发中的一些最佳实践,如分层架构、模块化设计和松耦合。通过这样的结构,项目可以更好地适应变化,易于维护和扩展。对于学习和理解J2EE、MVC模式和Struts框架的开发者来说,这是一个宝贵的资源...

    J2EE领域的一些技术框架结构图.docx

    以下是一些主要的技术框架及其在J2EE架构中的作用。 首先,Spring框架是Java开发中最常用的一个轻量级框架。Spring的核心设计理念是依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    j2ee框架 ssh整合详细步骤

    4. **Action层**: 控制器层,负责接收用户请求并将请求转发给相应的业务逻辑处理,最后返回结果给前端展示。 这样的架构设计使得各层之间职责清晰,便于维护和扩展。例如,在DAO层,可以通过工厂模式创建DAO对象,...

    郭克华J2EE高级框架实战教学视频01

    在Servlet或JSF等框架中,控制器处理HTTP请求,调用业务逻辑,然后将结果转发给适当的视图进行显示。 视频可能会涵盖以下知识点: - MVC模式的原理和优点 - 如何在J2EE应用中实现MVC架构 - Servlet作为控制器的...

    jsp博客系统 毕业论文设计

    3. **分层架构**:通过Spring整合Hibernate和Struts,形成了清晰的三层架构:表示层(视图)、业务逻辑层(控制)和数据访问层(模型)。这种结构有助于代码的组织和项目的扩展。 4. **页面请求分发与流程**:...

    J2EE框架案例说明.pdf

    - **Struts框架**:作为MVC(Model-View-Controller)框架,Struts主要处理用户请求,并将控制逻辑转发到相应的业务处理组件,同时提供自定义JSP标签库以简化视图层开发。 - **Hibernate框架**:是一个ORM(对象...

    struts--MVC框架

    它在J2EE的开发中起到了关键作用,特别是在实现呈现层、业务逻辑层和持久层的分离方面。以下是对Struts框架及其核心概念的详细解释: 1. **三层架构** - **持久层**:负责数据的持久化存储,如使用Hibernate框架...

    基于轻量级J2EE框架的网络教学系统.pdf

    - **分层设计**:采用了三层架构设计(表示层、业务逻辑层、数据持久层),使得各层之间职责清晰、互相独立。 - **国产基础软硬件支持**:系统基于国产的Linux操作系统和NC(网络计算机)设备构建,有助于降低系统...

    精讲SSH框架工作原理

    SSH框架遵循典型的J2EE三层结构,即表现层、业务逻辑层和服务层(数据服务层)。这种结构有助于实现模块化开发,降低各层之间的耦合度。 - **表现层**:主要使用JSP技术实现用户界面的展示。用户的所有交互请求都会...

    ssh架构简介.pdf

    SSH架构,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中的一种经典架构模式,主要用于构建基于J2EE平台的企业级应用程序。SSH架构以其分层设计、松耦合和模块化的特性,为开发者提供了高效且可扩展的...

Global site tag (gtag.js) - Google Analytics