web项目设计有几部分组成:action(控制层)、service(业务逻辑层)、Dao层、model层。分成几部分的意义是为了分工,项目架构更加清晰,不然全部写在一个类里面,单是维护就要闹出人命了,这个世界还是有一些规则遵守好。好了,下面简单说说我对这几层的看法,会显得很浅薄,各位就多多包涵。


action层:这是用来控制的,比如客户端发送一个请求过来,在action层接收请求,然后根据请求中的不同参数调用不同的service进行处理,当然也可以根据其他来进行判断,我一般都是用参数来判断的。一般可以设计一个servlet,这个servlet就是服务器的网关,所有的请求都由这个网关接收,比如登陆,可以发送参数action=login&username=mysterin&password=123456给servlet,servlet判断出action=login,于是就调用login的业务逻辑处理。


service层:所谓的业务处理,以上面的登陆为例,要想登陆成功,我们需要查询这个用户是否已经注册了,是否重复登陆,密码是否正确,这些就业务逻辑处理。当然这些业务处理都涉及到数据库的操作,因为用户信息是存储在数据库里面的嘛,所以需要查询数据库获取用户的信息。


Dao层:Dao全程是data access object(大概是这样的吧)数据接入对象。像service层说到,我们需要对数据库进行操作,为了分工更加明确,service层就只是处理业务的,毕竟数据库操作不属于业务逻辑的范畴,所以把数据库的直接操作单独拿出来,变成了Dao层,而service只要调用Dao就可以操作数据库了。

               Dao层一般是使用jdbc对数据库操作,然而这又涉及到一些数据库问题。举个例子,使用jdbc的过程一般是:加载数据库的驱动----获取数据库的连接connection-----创建一个statement-----statement执行sql语句-----如果是查询则用resultSet保存查询结果------关闭连接。完成数据库的操作后,你很开心,很自豪,然而这时boss来了,他说客户没钱买Oracle,所以想用mysql做数据库。好吧,谁让客户是上帝,于是你重新改驱动,改sql语句,改各种代码,又忙得累死累活的。因为你的Dao层耦合太紧了,如果不想改来改去,那就需要解耦。

               说一个解耦Dao的设计:首先写一个数据库管理类class  DataManager{……},通过这个类获取数据库的连接和释放;然后要写一个class DaoFactory{……},这是工厂模式,用来获取数据库操作的实例,这里是UserDaoImpl。要对数据库中的用户表进行操作,那需要写一个用户表的接口interface UserDao{……},这个接口包含查询、插入、删除等各种对数据库操作的方法,同时实现这个接口class UserDaoImpl Implements  UserDao{……},里面通过DataManager获取连接来操作数据库。

               这时在service层:UserDao userDao = DaoFactory.getUserImpl();        userDao.execute(sql);大概就这样在service层调用Dao层了。


Model层:这是数据模型层,一般对应数据库表的字段,包含set/get方法,就我看法,这一层主要就是为了方便对数据表的实体模型进行操作。