当前位置:  技术问答>java相关

设计模式问题?(疑惑&讨论)

    来源: 互联网  发布时间:2017-03-16

    本文导语:  大家好!      在坐的各位一定对JSP有很深的了解,我想问一下大家一般在做项目的时候设计模式或者说编程规范是什么?举个列子:我现在写程序(初学者) 查询,填加删除和数据库链接放在bean里,jSP页面仅用ResultSet的返...

大家好!
     在坐的各位一定对JSP有很深的了解,我想问一下大家一般在做项目的时候设计模式或者说编程规范是什么?举个列子:我现在写程序(初学者) 查询,填加删除和数据库链接放在bean里,jSP页面仅用ResultSet的返回值,不过我知道高手一般都把数据库读出来存在一个容器中,不过我是感觉这样做很是麻烦了.

    还有顺便问问,你们写程序喜欢调用数据源吗?好处是什么?

|
http://expert.csdn.net/Expert/topic/1135/1135654.xml?temp=7.174319E-02

|
http://expert.csdn.net/Expert/topic/1135/1135654.xml?temp=.8034479

|
呵呵,我正在一大堆贴子中找我回答的那片呢,没想到 hazeline兄先贴出来了,谢谢啦,本来开场白都写好了,下面还是把它说出来吧:

根据站点项目的大小以及其它特点,会有不同层次的抽象模式,比如说只是一个小型的站点,做到层次清晰就可以了,像操作数据库这样的代码都应该放在bean里,因为它的重用性和公用性都很强,写在bean里便于管理
上面只是低层次的抽象,因为即使这样做,jsp里还是有很多繁杂的代码,更高层次的抽象是按照mvc的思想,将“数据结构”、“显示”和“逻辑(事务)控制”分开,当然并不一定要与理论化的东西纠缠,根据具体情况,灵活的处理啦

下面是以前写的:
处理事务时,可以把bean分成三种:
第一种:负责操作数据库,只有一个DBOperate.java,里面包括加载驱动、建立链接等,对外提供两个方法ResultSet executeQuery(String sql)和boolean executeUpdate(String sql);
第二种:描述数据结构的bean,基本上是每个jsp页面/数据库表一个bean,其属性都是表单/数据库表中的字段,方法全是set(),get(),如对于用户注册,可以写一个UserInfo.java,属性包括user_name,user_id等,方法包括getUserName(),setUserName,getUserID(),setUserID()等
第三种:负责控制的bean,应该是一个对象一个bean,如对于用户你可以建立一个User.java,里面全是方法,如boolean addUser(UserInfo user_info),boolean deleteUser(int user_id),UserInfo queryUser(int user_id)等
说明:这样设计接口比较清晰,易维护。
第一种bean只负责数据库接口,如果数据库链接发生变化,那么修改这部分就行了。
第二种bean只描述数据结构,一个表单或数据库表定了,该bean也就确定了,它只负责把表单提交的数据存放到它的一个实例中,以及通过第三种bean从数据库中获得一个实例
第三种bean只负责操作,是真正需要我们编写的地方,它需要导入前面两种bean,通过调用第一种bean的方法,在第二种bean与数据库之间进行各种数据传递或操作

jsp页面里只需使用与本页相关的第二种bean,以及第三种bean中与本页相关的方法,仍以用户注册为例:
首先生成一个实例


再将数据存放到user_info中
user_info.setUserName(request.getParameter("user_name"));
user_info.setUserEmail(request.getParameter("user_email"));
...
再将user_info存到数据库
user.addUser(user_info);

这样虽然数据多了几次周转,但结构清晰

|
下面就是我最初得到的一篇文章,受益匪浅

jsp设计模式  作者:bingo  来自:cnjsp
===============================================
一:介绍
记得初学jsp的时候,总喜欢把他和asp,php去比较,也习惯于使用asp的开发模式去写jsp
后来才发现这真是很傻的做法,其实jsp一出了来就已经用MVC模式了。下面我就简要说说
jsp设计使用MVC来设计。

二:MVC介绍
MVC其实是模、视图、控制的缩写,也就是说在使用jsp时,有相应的文件去实现相应的操作
通常jsp只负责view也就是只负责显示页面。业务逻辑等有bean(ejb)去实现。下面讨论的是
不使用ejb的情况下实现。如果使用ejb,ejb负责M.C通常会由servlet去实现。或者使用struts.
struts的介绍你可是去http://jakarta.apache.org/struts去看。以后的文章中我会介绍。

三:设计思路
当你构建一个Application时。你必须考虑界面的问题,而界面修改是非常平常的。如果你在
jsp中实现所有的操作,一旦修改界面你麻烦大了。美工不懂jsp的,你必须自己去修改无数个
文件,头不要太大,而此时一般时间都很紧,使用MVC则可以减少你的一些麻烦。
在设计时候jsp只负责显示页面,也就是说jsp调用Bean(Struts,servlet)传过来的数据然后显示
而Bean(Struts,servlet)负责收集jsp需要的数据,用ArrayList(Arttibute)传给jsp。假如需要
提交表单,一般也直接提交给Struts,servlet,处理后以后再返回处理信息。
而其中相应的业务逻辑由Bean去实现。

四:Bean的设计
在我使用时候Bean通常有三类,分别在manager,entry,database目录下面。
manager下面的bean做商业逻辑
entry下的bean就是封装数据,其实就是每个数据库表对应会有一个bean。jsp得到的也全部是类。
database下的bean就是操作数据库,执行如insert,update,delete,load(查询一条记录),
batchload(查询多条记录)。
他们之间的关系是entry负责封装数据,作为database的调用参数,返回结果。
manager调用database处理的结果。manager和jsp通信。jsp得到的结果从manager来, jsp需要做
操作调用manager,即使是一个insert 在database存在这样的方法但在manager中你还是需要再封装
一次。这样做的目的是使结构尽量简单。database只负责操作数据库。manager只做逻辑(取相应的数据)
处理相应的逻辑,而entry则只把database取到的数据封装,或则把页面得到的参数封装,做为参数
传给相应的Bean.

五:设计实例
下面我把留言板作为实例来讨论:
entry/Guestbook.java(留言板对象)
database/GuestbookMap.java(更新,删除,修改留言板)
manager/GuestbookManager.java(处理所有的事务)
数据表结构(postgresql)
create sequence seq_guestbook increment 1 ;
/**序列号生成器**/
create table guestbook(
id int8  default nextval('seq_guestbook'), /**主键**/
title varchar(64),/**主题**/
body text,/**内容**/
sayid int8,/**发言人**/
toid int8,/**接受人**/
saytime datetime default now(),/**留言时间**/
newflg smallint    default 1/**是否查看过**/
);

Guestbook.java
=======================
import java.util.*;
public class Guestbook(){
private int id;
private String title;
private body title;
private int sayid;
private int sayid;
private Date saytime;
private short newflg;

public Guestbook(){

}

public int getId(){
return this.id;
}

public void setId(int _id){
this.id=_id;
}
........
(全是get/set方法)
}

GuestbookMap.java
==============================
import Guestbook;
public class GuestbookMap(){
public GuestbookMap(){

}

public Guestbook load(int id){
//取到一条guestbook
}
//sqlstr 查询条件
//orderstr 排序条件
//rcdbegin 记录开始
//rcdend 记录结束
//
public ArrayList batchLoad(String sqlstr,String orderstr,int rcdbegin,int rcdend){
//ArrayList 里面封装了Guestbook
}

public void insert(Guestbook info){

}

public void update(Guestbook info){

}

public void delete(int id){
//取到一条guestbook
}

public int getRcdNums(String sqlstr){
//取记录条数
}
}

GuestbookManager.java
根据需要封装需要的方法,这部分才是你要写的
=============================
上面的方式entry,database的文件可以自动生成,这个工具我已经开发了,如果需要联系我。
你需要写的就是GuestbookManager里面的方法,你也许会觉得工作量比你所有的操作都在jsp中
大,但是这样结构非常清晰。你还需要的就是写一个数据库连接池,你所有的数据库操作都从一个地方
取,每一次都去连接数据库开销很大的。

六:技术优势
1:结构清晰
2:维护方便
3:保护代码比较好。
..........
七:结束语
我只是简单的介绍一下,具体的使用你需要在实际运用中积累,如果需要我的代码参看,联系我,
如果你觉得写的和狗屎,非常不好意思,浪费了你宝贵的时间。

|
gz

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3