Experience 杂谈Dao,Service,Controller层(Struts1,Spring,Ibatis)

本文探讨使用Struts1+Ibatis+Spring框架组合开发时应注意的事项,包括命名规范、高内聚低耦合原则的应用、各层间的交互方式以及如何通过JavaBean提高系统的可扩展性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件的设计要体现可扩展性,可维护性,可重用性

谈谈 Struts1 + Ibatis + Spring 进行开发所要注意的问题


[b][color=blue]1 命名规范问题[/color][/b]

查询 日期 在sql中有sql date toChar转
插入更新,在程序中转 由String 改为Date


[b][color=blue]2 三层约束问题[/color] [/b]
[b] 2.1 高内聚低耦合[/b]
Controller,Service,Dao三层之间要低耦合,各个层内部要高内聚,当然达到了松耦合也就达到了高内聚了。这些话一般人都会讲,在这里我谈的是我在工作中所遇到的,以及加上自己的想法,只是鄙见而已,请多赐教。
各个层之间不能相互牵扯,比如说:Controller层,我现在用的是Struts1,如果把Struts1的form作为参数传到了Service层,然后又传到了Dao层(因为Struts1的form只是用来传递参数的,The Struts1 framework provides an ActionForm class to help transfer data between Model and View,当然还可以加些validate等操作)。 如果有更好替代Struts1的Controller层的框架,不用Struts1了,那Service,Dao层岂不是不能用了,而且做测试的时候,还要去new Struts1的form,多么麻烦的事啊!根本不能重用了,这样的软件是失败的软件的,是恶心的软件。当然,如果只是为了满足现状,对以后的事什么都不在乎话也行。
为了解决这样的问题,就借助了中间的JavaBean,把form参数转到JavaBean中,在把JavaBean往下层传递,到时候抛弃Struts1的时候,Service,Dao层的东西还是可以直接拿来用的。
这个JavaBean怎么来定义呢?
1,select:
参数比较少的话,少于三个,直接传参数进Service层
参数大于三个小于8个的话,用HashMap封装传进Service层
参数大于8个以上可以新建一个QueryBean(JavaBean)封装参数传到Service层
对于返回的参数,要新建xxxRDTO。为什么,这样很有利于扩展。稍后谈谈。
2,update,insert就用String,HashMap,DTO就行了。

Controller层:只负责收集页面上传递过来的参数。(页面初始化的数据,可以多次掉Service层的接口中的select方法,其他的插入更新操作必须一个Action里调一次Service),这样会带来问题:例如 插入一个人员信息的时候(规则是不能有同名的),这个时候只在Action层调一次Service 层的的返回boolean型的insert方法的时候,前台只能显示插入失败,插入成功,而对于存在同名的人员这种提示是无法实现的,这个时候可以把Service层的这个接口的方法的返回类型该为HashMap,就可以返回给前台丰富的提示。但是这样返回HashMap好吗?Most often, the Model is represented as a set of JavaBeans. Typically, developers will use the Commons BeanUtils to transfer data between ActionForms and the Model objects (or a Facade). Preferably, the Model will do the "heavy lifting", and the Action will act as a "traffic cop" or adapter.



Service层: 只负责业务校验,业务处理。(可采取重载为其他模块提供丰富的接口)

Dao层:只负责与数据库的操作。(可采取重载为其他模块提供丰富的接口)
每个Dao层都有与相应的表的操作,都有一个比较全的insert,update全表的操作,由于DTO是与表对应的,所以测试的时候如果inert的是DTO的话,那么就认为DTO的全字段的插入,update的参数是DTO的话,那么就认为DTO的全字段的更新。回到
对于select返回的参数,要新建xxxRDTO,而不能用DTO的缘故。为什么? 举个例子,如果返回的是人员的DTO且是全字段,现在需求变更,人员字段显示要增加xx字段(xx字段是在另外一张表中),那么如果少做改动的话,在DTO里加入这个属性即可,这个时候冲突就来了,因为每个Dao层都有insert和update全表的操作(DTO的所有属性),这个时候就有问题了,因为刚加的这个属性是另外一张表的字段,如果做全字段插入更新的话(测试),那么很容易出错的.那这怎么办?当然有解决的方法,为了达到扩展伸缩的效果,新建一个xxxRDTO,这个xxxRDTO可以继承刚才的人员DTO,只在这个RDTO里加一个字段,这个RDTO用于Ibatis返回的参数,就可以达到所有的效果,也利于扩展。


以后陆续补上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值