当前位置: 首页 >> 程序设计 >> 对持久层与业务层分离思想的类比化理解
 

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

作者:tidus2005      来源:csdn     发表时间:2006-07-17     浏览次数:      字号:    

 暑假在家无聊,还不如多多充下电看看书 。在还没放假的时候,自学了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>

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

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

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
看了 虽然还是不怎么懂 但同学好学的精神值得表扬^_^~~~~~~~!!!!!!!! 不错不错!!!!
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •