| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1277 人关注过本帖
标题:java web 应用中包,接口的设计
只看楼主 加入收藏
gknl
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-29
收藏
 问题点数:0 回复次数:10 
java web 应用中包,接口的设计
 我正在作一个网站,想知道那个包跟接口怎么设计?哪个包用来放什么类,哪个接口定义什么?
搜索更多相关主题的帖子: web java 接口 应用 定义 
2007-09-11 21:50
luoxian_2003
Rank: 1
等 级:新手上路
威 望:2
帖 子:163
专家分:0
注 册:2006-2-22
收藏
得分:0 

那要看你使用的是什么框架,还要根据具体的功能来分类存放啊,没有死规定的,自己看着爽,管理方便就行了


天地有正气,凛烈万古存。
2007-09-12 10:23
ConZhang
Rank: 1
来 自:北京
等 级:新手上路
帖 子:282
专家分:0
注 册:2007-8-7
收藏
得分:0 
你的问题不是很明确啊?不明白!
2007-09-12 14:16
gknl
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-29
收藏
得分:0 
struts2中实现MVC的,我想把包跟接口设计得比较规范
 

2007-09-12 21:42
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
采用标准的架构:描述从低层到高层
首先是系统分析,找出你需要什么功能,然后按照下面的步骤执行:

数据库层:数据库层就是SQL语句、数据库、表、视图、触发器等等的创建和管理。这一层和JAVA无关,但是却是最重要的一层
持久层(Hibernate、JPA、JDBC):这一层的目的很明确,就是ORM,这里还不用你定义接口和类,你只要使用框架就可以了。
DAO层(Data Access Object):这一层比较重要点,这里定义的都是对一些最原始的类进行操作的方法
打个比方:

我们有一个Account类,用来表示账号,那么对应有一个接口

public interface AccountDao
{
Account create( Account account ); //创建一个Account账号
void update( Account acconut ); //修改账号
void delete( int id ); //通过ID删除Account
void find( int id ); //通过ID找到Account
}

然和我们有具体的实现
public class AccountDaoImplForHibernate implements AccountDao
{
//这里实现AccountDao所有的接口
}

这里要说明一下,为什么要这个DAO层,我直接操纵Hibernate框架去完成不就可以了么?为什么要用一个AccountDao在从中进行阻拦。
这就是Java中接口威力所在,定义了一个接口,你就不用管下面的具体实现是用那个框架实现的,总之实现就可以了。因为软件的目的是要重用,而在WEB开发中,每个网站都有自己不同的要求,所以也就让人觉得重用不重用不关我事情:“反正老子就用Hibernate管理数据库了,下次再开发类似的大不了我重写,反正又不难。”很明显,这种思想很实用,似乎马上就能进行开发,但是这明显是错误的思路。

根据我开发B/S系统的经验(容我这么说吧,其实我也没弄过几个),我喜欢利用Dao层把WEB框架和ORM框架隔离开来进行开发。不知道大家在开发WEB站点的时候有么有觉得,每次修改完一个类都得重新部署,每次部署都得重新加载数据源、连接数据库、配置持久化框架稀里哗啦一大堆事情,部署一个项目往往用掉十几甚至几十秒。但是如果我们能利用Dao层进行隔离,那么情景就又是另外一个样子。

我们可以伪造一个数据库,没错,是伪造的,用了HashMap<Integer,Account>对数据库进行简单的模拟。具体来说,就是为测试写一个类去实现AccountDao接口,但是这个类不再连接数据库,而是直接对伪造的数据库,也就是HashMap表进行操作

public class AccountDaoImplForTest
{
//具体实现
}

这样部署起来就快多了。

而对于AccountDaoImplForHibernate的测试,可以通过J2SE应用程序完成,同样也省下了部署WEB到J2EE服务器的时间。效率第一哈~

顺便说说这一层应该抛出的异常。为了屏蔽掉Dao的具体实现,我们很有必要为Dao层自己定义一些异常,用来替代由Hibernate、JDBC他们抛出的异常。这样对于Dao的上一层Service层来说,只看到Dao的东西,其他什么都没看见,也不知道这个Dao具体是Hibernate呢还是JPA呢还是JDBC


同样的道理,我们来看Service层
Service层:在Service层中我们定义这样的接口
public interface AccountService
{
Account register(Account account); //注册
Account login( String username, String password ); //登录
void modify( Account account ); //修改
Account find( int id ); //通过ID获取Account
Account delete( int id ); //删除Account
}

乍看之下,似乎Service层和Dao层差不多,无谓就是多几个方法,那我直接定义到Dao层不可以吗?答案肯定是不可以,真是废话,可以我就不写了。但还是要说说理由:很简单,Service层隔离了业务需求变化和数据库之间的关系。也就是说,不管上面的业务逻辑怎么变化,你只用修改Service层的代码就可以了,Service通过调用Dao来实现对数据库的操纵,很显然Dao不知道Service的存在,所以Service怎么变Dao都不用去理会。除非Service提出了Dao没有实现的要求,比如说Service需要获取所有账号的人数,而我们当初在系统分析的时候没有做好,没在Dao层预留一个方法去获取所有账号的数量,那么这个时候就得被迫修改Dao层了,但是,也仅仅只是修改到Dao层而已,由于Dao层的功劳,你还不必去修改数据库。

所以说,开始项目之前对整个项目进行详尽的业务分析对你定接口是有很直接的因果关系的,分析没做好,那么接口就得整天改,这个时候你还不如不用接口呢~~~

在Service层抛出的异常也有讲究:在Service层,我们只能抛出业务逻辑上的异常,像AccountExistedException(账号已存在)异常啦、UsernameNotFoundException(用户名没找到异常)啦等等,这样Service的上一层就不会感觉到Dao层的存在。

终于到了最后一层:VIEW层
VIEW层:在这一层你不用定接口,你要使用WEB框架的接口、类,至于是STRUTS还是JSF由你定


以上都是随便说说的,大家看后不要当真...

淘宝杜琨
2007-09-13 00:43
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
所以说,具体是WEB -> Service -> Dao -> ORM -> DataBase

其中Spring重点掌管Service、Dao两部分,ORM、WEB都有很成熟的框架,用他们就是了。
至于DataBase嘛~~个人爱好MySQL,你喜欢SQL Server,都随便哦~~~

淘宝杜琨
2007-09-13 00:50
gknl
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-7-29
收藏
得分:0 

非常感谢你详细的讲解,还有题外话,你的头像很有型!!!

 

[此贴子已经被作者于2007-9-13 9:24:11编辑过]


2007-09-13 09:23
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
没什么讲解不讲解的,这些都是我在实际中摸索出来的,看了不少的书,走了不少的弯路。
所以里面有很多都是我想当然的地方,只能说是一起探讨吧。

我GF管我叫虫子....

淘宝杜琨
2007-09-13 10:39
evollock
Rank: 1
等 级:新手上路
帖 子:67
专家分:0
注 册:2007-7-4
收藏
得分:0 

顶起,学习了,虽然我还不知道啥叫DAO...

2007-09-13 11:37
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
Data Access Object,用来实现数据表的增加、删除、修改等操作,具体是为了屏蔽数据库持久层或者JDBC中的SQL语句的。
这样上层Service只管调用DAO层就可以了,具体用什么框架实现:不管。目的是分离层与层之间具体实现的依赖

淘宝杜琨
2007-09-13 11:48
快速回复:java web 应用中包,接口的设计
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020940 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved