暑假在家无聊,还不如多多充下电看看书 。在还没放假的时候,自学了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. 持久层的需求 在设计持久层时,需要考虑以下几个关键需求: - **数据一致性**:确保所有数据操作都能正确地反映到数据存储...
2. **Session Beans**:虽然不是直接的持久层组件,但它们通常与持久层交互,以执行业务逻辑。会话Bean可以调用实体Bean的方法来操作数据库,或者通过JPA API直接进行数据操作。 3. **Persistence API**:EJB 3.0...
在持久层的理解上,Java开发者通常会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,来简化数据库操作。这些框架能够将Java对象映射到数据库表,使得开发者无需编写大量的SQL语句,就能完成数据...
而对持久层的深入理解,有助于开发者设计出高效的数据访问策略,优化数据库性能,从而提高整个系统的运行效率。在实际开发中,还需要结合其他技术,如Spring框架来管理和协调各个层之间的协作,实现松耦合和高内聚的...
1. **清晰的分层**:持久层应当是一个明确的逻辑层,它与其他层(如表示层、业务逻辑层等)有着清晰的界限。这意味着数据持久化的实现细节不应泄露给系统的其他部分。 2. **低耦合**:持久层应该尽可能减少对外部...
Java持久层框架是用于实现对象与数据库之间的交互,以便在软件开发过程中简化数据库操作的重要工具。本文旨在对比四种常用的Java持久层框架:Hibernate、iBatis(现称MyBatis)、EJB(Entity Bean)以及JDO(Java ...
### 使用Hibernate和Spring开发持久层的关键知识点 #### 引言 在现代企业级应用开发中...通过深入理解Hibernate的ORM能力和Spring的依赖注入与AOP特性,开发者能够构建出既符合业务需求又易于维护的持久层解决方案。
Java三层架构开发是一种常见的软件设计模式,它充分利用了MVC(Model-View-Controller)模式,将应用程序分为表现层(View)、业务逻辑层(Controller)和数据访问层(Model),以实现各层职责的分离,提高代码的可...
持久化层是应用程序中的一个关键部分,它负责将业务对象的数据保存到数据库中,并在需要时从数据库中加载这些数据。这个自定义实现可能是为了学习目的,以便理解持久化机制的工作原理,或者是为了满足特定项目的需求...
此外,它还应能灵活应对数据表结构的变化,通过调整自身实现策略,确保数据持久层与业务逻辑层的接口不受影响。这一特性不仅提升了系统的可扩展性,也降低了数据库迁移所带来的风险与成本。 ##### 增量数据库备份与...
数据库持久化层是指在应用程序中用于与数据库交互的一层抽象,它负责将对象的状态转换为可以存储的数据格式,并在需要时恢复这些状态。这样做的好处在于,开发者可以不用直接编写SQL语句,而是通过面向对象的方式来...
**自定义持久层框架** 的核心在于,它可以根据项目的需求定制化SQL的处理、事务的控制、数据的转换等,避免了Mybatis或其他框架的一些限制,提高了代码的可扩展性和适应性。例如,开发者可能通过配置文件来控制SQL的...
域对象,通常指业务逻辑中的实体类,它们在持久化层中主要存在三种状态:临时状态、持久化状态和游离状态。每种状态都代表了对象与持久化框架(如Hibernate)之间的不同关系,进而影响着对象的生命周期管理和数据库...
在IT行业中,自动化的代码生成工具是提高开发效率的关键,特别是在构建复杂的持久层时。"自动生成持久层代码工具"正是这样一个解决方案,旨在帮助开发者快速地生成实体类、DAO层以及对应的XML配置文件,从而避免繁琐...
在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员进行数据库操作而设计的工具。它可能包含了对数据库CRUD(创建、读取、更新、删除)操作的抽象,使得开发者可以更专注于...
在Java中,持久层框架提供了对象持久化的能力,使得Java对象可以直接与数据库中的记录进行对应,无需编写大量的SQL语句。例如,Hibernate允许开发者通过定义实体类和映射文件,实现对象与表的自动同步,从而简化...
iBATIS是一个开源的Java持久层框架,它简化了数据库操作与应用程序的集成,使得开发者可以将注意力集中在SQL语句的编写和业务逻辑的实现上,而无需关注底层的JDBC代码。本教程将深入探讨iBATIS的核心概念、主要功能...