最近一直在琢磨以下几个问题:
1.web软件到底该分多少层好
2.如何降低层之间的耦合性
3.各层如何进行单元测试
我就以上3个问题说一下自己的理解
1.web软件到底该分多少层好?
常说的mvc,有3层,view,control,model,但具体的项目中的实现恐怕没有对应的那么好的,我的理解:
view(jsp)+actionservlet +action +service+dao+db(可能不对啊!)
view负责展示例如jsp
actionservlet 作为控制层
action我把它归于控制,因为他并不是先具体业务逻辑
service 业务逻辑层
dao 数据持久层
db 数据库
系统的核心在service,所以作为开发人员的关注点也应集中在service(业务逻辑层)。
2.如何降低层之间的耦合性?
从上面的层次来看主要是service和dao ,action和service,以service和dao的解偶为例来说
解偶的方式有如下(就目前所想到的)
1.通过dao接口的方式 在service中通过调用接口达到解偶目的
2.IOC(控制反转),通过配置文件中配置dao(大的系统中如用此方式恐怕配置文件会很大)
3.可以利用设计模式 如工厂模式,当dao中有所改动,只需修改相应工厂方法即可
3.各层如何进行单元测试?
对与view的单元测试,恕本人愚钝目前还不知道
ationservlet和action中不含逻辑可以不进行单元测试(个人观点)
主要说一下service层的测试,测试该层的目的主要是看业务逻辑是否正确,所以一般不涉及到数据库的操作当然你说service中调用了dao中代码,涉及到了数据库操作,这是我们需要mock对象,测试工具可用easymock,接下来是测试dao ,在javaeye中看了些帖子,说测试dao'层主要是看发送的sq的正确性,其实这是独立的dao测试,见到大多数人建议针对dao采用集成测试,即结合真实数据库测试,我也赞同这种测试dao的方式,因为在集成测试中这样才使你的测试更有意义,看到的效果才更真实(拙见)
目前了解的不多,有点晕眩,记录下目前的理解,有待以后改进完善,希望看到的人不吝赐教!