`

对持久层与业务层分离思想的类比化理解

阅读更多

    暑假在家无聊,还不如多多充下电看看书 。在还没放假的时候,自学了STRUTS,体会到了什么叫MVC既,表示逻辑与业务逻辑的分离,虽然开发起来比传统的开发(既JSP和业务逻辑还有持久逻辑写在一起的那种混乱模式)麻烦,但是好处还是显而意见的。

    一个软件是否优秀,要看很多方面。我们来谈谈层次结构方面,一个软件的维护,占据了整个软件生命周期的一半以上,如何使得这个漫长的维护过程变得简单易调试呢?我们可以利用分层次结构。打个比方,18世纪的蒸汽机的发明带动了工业革命,人们利用这个前提技术,发明了伟大的火车。以前的火车是蒸汽机车与车厢是固定在一起的,这样的缺点1是可维护性差;2是结构不合理;比如蒸汽机车头故障了,车厢就不能行驶了,这样的结果就导致了资源的浪费。后来人们在漫长的实践与摸索中,设计出了火车的第二个形态,既采用分离式的挂接车厢。这样火车的结构就实现了分层化,这样的好处是,任何一层出现了故障,都可以用正常的车厢来替换,而且能过大型的弯道。

    我们软件开发也是如此,以前传统的应用,都是把表示逻辑,业务逻辑,数据逻辑写在一起的。以至于应用出现异常时,维护人员要在混杂的代码种找出引发异常的代码所在。这是一个极其困难,极其低效,极其枯燥的过程。
随着设计模式的发展,更好的设计方案由此而出。那就是将显示逻辑,业务逻辑以及数据逻辑全部分离。

    请看下面这个例程(本例子旨在传达思想,具体细节如有错误请读者自行调试改正)

    这个例子以很简单的从数据库中查询学生表,显示出学生信息。从而说明如何将表示逻辑,业务逻辑,显示逻辑像分离。

show.jsp
--------------------------------------------------------------

<%@ page contentType="text/html;charset=gb2312"% import="java.sql.*">
<%
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  Connection conn = DriverManager.getConnection(url);
  Statement stat = conn.createStatement();
  ResultSet rs = stat.executeQuery("select * from t_student");
%>
<html>
<body>
<table>
  <tr>
    <td>学生编号</td><td>学生姓名</td>
  </tr>
  <%
    while(rs.next()){
%>
<tr>
  <td><%=rs.getString("id")%></td><td><%=rs.getString("name")%></td>
</tr>
 <%
}
rs.close();
stat.close();
conn.close();
%>
</table>
</body>
</html>

-------------------------------------------------------------------------------

上面这段程序,首先获得一个数据库连接,然后执行SQL语句,把获得的信息放到ResultSet中,再在页面上进行显示。我们可以看到,表示逻辑和业务逻辑还有数据逻辑高耦合在一起了,看起来让人觉得眼花。那么,我们对上面这个例子进行一下改进,从而将三层逻辑分离。

--------------------Tstudent..java---------------用来封装数据信息
package myTest;

public class Tstudent{
  private String id;
  private String name;

  public void setId(String id){
    this.id = id;
  }
  public String getId(){
    return id;
  }

  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
}

---------------------------------TstudentDAO.java -----------------Data Accessor 用来进行数据逻辑的处理
package myTest;
import java.sql.*;
import myTest.Tsutdent;

public class TstudentDAO{
    private Connection conn = null;
    private PreperdStatement pstat = null;
    private ResultSet rs = null;
   
    public TstudentDAO{
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection("jdbc:odbc:MyDataSource","","");
        }catch(ClassNotFoundException e){
            System.out.println("驱动加载错误,找不到相关驱动类!" + e);
        }
    }

   public static Tstudent getTsutdentInfoById(String id){
      Tstudent student = new Tstudent();
      String sql  ="select * from Tstudent where id=?";
      pstat.setString(1,id);
      pstat = conn.prepareStatement(sql);
      rs = pstat.executeQuery();
      if(rs.next()){
          student.setId(rs.getString("id"));
          student.setName(rs.getName("name"));
      }
          return student;
   }
}

------------------------------show.jsp-----------------------用来显示数据
<%@ page contentType="text/html;charset=gb2312"% import="java.sql.*" %>
<%@ page import="myTest.*" %>
<%
    Tstudent student = TstudentDAO.getTstudentInfoById("1");
%>
<html>
<body>
<table>
  <tr>
    <td>学生编号</td><td>学生姓名</td>
  </tr>
<tr>
  <td><%=student.getId()%></td><td><%=student.getName()%></td>
</tr>
</table>
</body>
</html>

    这个改进后的版本与第一个版本相比,显示逻辑,业务逻辑,数据逻辑层次关系更加的清晰,分工更加的明确,美工人员可以更加专注于网页的设计,业务逻辑开发人员可以把精力放在功能的实现上,而数据逻辑开发人员,可以更加专精于数据库的操作,从而提升应用的性能。我们如果对任何一个层次进行改动,都不会影响其他的层次,整个程序的维护行得到了大大的提升。

    综上说述,一个优秀的应用,采取合理的层次结构,可以让开发,维护,管理更加的方便,快捷,高效。

 

 

 

 

分享到:
评论

相关推荐

    持久层和持久化

    在Java开发中,持久层和持久化是两个关键的概念,它们是对象与数据库交互的核心。本文将探讨iBATIS、Hibernate以及Java Persistence API (JPA)这三种流行的持久化框架,并进行对比分析。 首先,持久层(Persistence...

    持久层设计

    - **可测试性**:由于数据访问逻辑与业务逻辑分离,使得单元测试更加容易编写。 #### 4. 持久层的需求 在设计持久层时,需要考虑以下几个关键需求: - **数据一致性**:确保所有数据操作都能正确地反映到数据存储...

    EJB 持久层设计

    2. **Session Beans**:虽然不是直接的持久层组件,但它们通常与持久层交互,以执行业务逻辑。会话Bean可以调用实体Bean的方法来操作数据库,或者通过JPA API直接进行数据操作。 3. **Persistence API**:EJB 3.0...

    你还java三层结构开发,很好的利用了MVC结构,尤其是对持久层的理解运用很有帮助与参考价值

    在持久层的理解上,Java开发者通常会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,来简化数据库操作。这些框架能够将Java对象映射到数据库表,使得开发者无需编写大量的SQL语句,就能完成数据...

    java三层结构开发,很好的利用了MVC结构,尤其是对持久层的理解运用很有帮助与参考价值

    而对持久层的深入理解,有助于开发者设计出高效的数据访问策略,优化数据库性能,从而提高整个系统的运行效率。在实际开发中,还需要结合其他技术,如Spring框架来管理和协调各个层之间的协作,实现松耦合和高内聚的...

    面向应用的持久层设计

    1. **清晰的分层**:持久层应当是一个明确的逻辑层,它与其他层(如表示层、业务逻辑层等)有着清晰的界限。这意味着数据持久化的实现细节不应泄露给系统的其他部分。 2. **低耦合**:持久层应该尽可能减少对外部...

    java持久层框架对比

    Java持久层框架是用于实现对象与数据库之间的交互,以便在软件开发过程中简化数据库操作的重要工具。本文旨在对比四种常用的Java持久层框架:Hibernate、iBatis(现称MyBatis)、EJB(Entity Bean)以及JDO(Java ...

    用 Hibernate 和 Spring 开发持久层

    ### 使用Hibernate和Spring开发持久层的关键知识点 #### 引言 在现代企业级应用开发中...通过深入理解Hibernate的ORM能力和Spring的依赖注入与AOP特性,开发者能够构建出既符合业务需求又易于维护的持久层解决方案。

    java三层结构开发,很好的利用了MVC结构,尤其是对持久层的理解运用

    Java三层架构开发是一种常见的软件设计模式,它充分利用了MVC(Model-View-Controller)模式,将应用程序分为表现层(View)、业务逻辑层(Controller)和数据访问层(Model),以实现各层职责的分离,提高代码的可...

    自己写的一个持久化层

    持久化层是应用程序中的一个关键部分,它负责将业务对象的数据保存到数据库中,并在需要时从数据库中加载这些数据。这个自定义实现可能是为了学习目的,以便理解持久化机制的工作原理,或者是为了满足特定项目的需求...

    复合领域模型的数据持久层架构

    此外,它还应能灵活应对数据表结构的变化,通过调整自身实现策略,确保数据持久层与业务逻辑层的接口不受影响。这一特性不仅提升了系统的可扩展性,也降低了数据库迁移所带来的风险与成本。 ##### 增量数据库备份与...

    php 轻量db层 持久化层 数据库层

    数据库持久化层是指在应用程序中用于与数据库交互的一层抽象,它负责将对象的状态转换为可以存储的数据格式,并在需要时恢复这些状态。这样做的好处在于,开发者可以不用直接编写SQL语句,而是通过面向对象的方式来...

    java 自定义持久层框架代码

    **自定义持久层框架** 的核心在于,它可以根据项目的需求定制化SQL的处理、事务的控制、数据的转换等,避免了Mybatis或其他框架的一些限制,提高了代码的可扩展性和适应性。例如,开发者可能通过配置文件来控制SQL的...

    域对象在持久化层的状态

    域对象,通常指业务逻辑中的实体类,它们在持久化层中主要存在三种状态:临时状态、持久化状态和游离状态。每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库...

    自动生成持久层代码工具

    在IT行业中,自动化的代码生成工具是提高开发效率的关键,特别是在构建复杂的持久层时。"自动生成持久层代码工具"正是这样一个解决方案,旨在帮助开发者快速地生成实体类、DAO层以及对应的XML配置文件,从而避免繁琐...

    一套简化Java持久层操作的类库

    在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员进行数据库操作而设计的工具。它可能包含了对数据库CRUD(创建、读取、更新、删除)操作的抽象,使得开发者可以更专注于...

    java三层结构开发,很好的利用了MVC结构,尤其是对持久层的理

    在Java中,持久层框架提供了对象持久化的能力,使得Java对象可以直接与数据库中的记录进行对应,无需编写大量的SQL语句。例如,Hibernate允许开发者通过定义实体类和映射文件,实现对象与表的自动同步,从而简化...

    iBATIS持久层框架开发

    iBATIS是一个开源的Java持久层框架,它简化了数据库操作与应用程序的集成,使得开发者可以将注意力集中在SQL语句的编写和业务逻辑的实现上,而无需关注底层的JDBC代码。本教程将深入探讨iBATIS的核心概念、主要功能...

Global site tag (gtag.js) - Google Analytics