: 关于struts2 中对action 封装的方案的一些想法
皇室勇少
2010-02-27
方法一: 每一个动作一个action 比如 userLoginAction [登陆动作]
优点: 这样操作起来好像很清楚, 缺点: 到时候action多得会让你头痛。 方法二 : 以实体为单位 比如 userAction [实体为用户],billAction[实体为表单] 优点: 这样就是以面向对象的概念来做的。关于这个实体的相关操作都写在这个action里面.同时action属性也好定义。用实体即可。 不论是用户请求时参数的封装还是。响应时的结果都比较方便 缺点: 这样一来一个action里面的东西实在太多。 方法三: 以页面为单位 每一个页面对应一个action类似于struts1 如果 [registeActoin]注册页面 优点: 一个页面一个action . 而且名字与页面类似即可。这样容易管理。又好找! 缺点: 有时候一个页面操作的类,可能好多个。对action属性的封装极为不利 现在公司采用的是第二种方案: 但以发现不少问题。想知道大家都是怎么做的。 |
|
liwenjie
2010-04-20
这是action的粒度问题,建议采用一个领域模型或者小模块为一个action,比如订单、客户,而这个action保证不要太大,如果太大比如数十个方法,表明你的粒度过大了
|
|
luojy8877
2010-04-23
liwenjie 写道 这是action的粒度问题,建议采用一个领域模型或者小模块为一个action,比如订单、客户,而这个action保证不要太大,如果太大比如数十个方法,表明你的粒度过大了
如何控制模块的大小呢 比如按订单,客户分 订单只有5个方法 客户有十多个方法 怎么去统一的规划粒度大小呢 过大的颗粒用何种统一的方式去拆分呢 |
|
jakend
2010-04-23
采用方案4:
增删改查为一个action 列表一个action(包括分页等) |
|
liwenjie
2010-04-24
luojy8877 写道 liwenjie 写道 这是action的粒度问题,建议采用一个领域模型或者小模块为一个action,比如订单、客户,而这个action保证不要太大,如果太大比如数十个方法,表明你的粒度过大了
如何控制模块的大小呢 比如按订单,客户分 订单只有5个方法 客户有十多个方法 怎么去统一的规划粒度大小呢 过大的颗粒用何种统一的方式去拆分呢 订单和客户是肯定要区分的,action的粒度service的粒度包括dao的粒度都会有这个问题,下层的dao的粒度比较小即方法就是单表的增、删、改,和客户需要的查询(IBatis中,客户需要什么查询结果通常就是一个sql),上层的粒度比较大,service层调用多个dao,service方法很可能是一个门面方法,放置事务。 action的方法肯定是一个操作用例一个方法。 说到原则还是按照业务逻辑区领域去划分,只要是一个业务领域的操作聚集,并且action内的方法不要太大就可以了,如果比如客户操作比较多,那就要分析都是些什么操作,可以分下类然后划分,我们不是为了划分而划分,其实目的只有一个,达到较好的可读性及良好的对象封装,不至于代码混乱 |
|
luojy8877
2010-04-24
liwenjie 写道 说到原则还是按照业务逻辑区领域去划分,只要是一个业务领域的操作聚集,并且action内的方法不要太大就可以了,如果比如客户操作比较多,那就要分析都是些什么操作,可以分下类然后划分,我们不是为了划分而划分,其实目的只有一个,达到较好的可读性及良好的对象封装,不至于代码混乱 若有所悟,但又比较模糊。以前划分领域模型比较粗糙,比如客户操作都仍一个action 订单操作都扔一个action。现在看来是以前分析得不够细,太粗旷了 应该按功能类型啥的分细些,不过现在只是有个模糊的概念。这里比如像一个客户对象 操作很多,我们还可以根据什么来提取更细的对象呢 动作归类吗?可以再给些启发吗 |
|
liwenjie
2010-04-25
是啊 其实把action分离成一个比较好的粒度就是为了达到良好的可读性和OO原则。把操作根据需求分下类,看看都是什么业务逻辑,肯定是可以划分为更细的分类的
|
|
皇室勇少
2010-04-26
一直以为这里没什么人气。贴子发表了这么多天之后才有人回答。。!
所以一直就没来看过! 方案我解决了! 目前我采用的是! 类似 struts1 formAction的设计! 对实体进行封装! 然后在实体上面再进行抽象! 因为大概 5-8个实体会组成一个小模块! Abstract BaseAction[顶层Action] | Abstract ModuleAction[模块action] | | | Action_1 Action_2 Action_3 采用的是这种方案。 |
|
luojy8877
2010-04-26
皇室勇少 写道 一直以为这里没什么人气。贴子发表了这么多天之后才有人回答。。!
所以一直就没来看过! 方案我解决了! 目前我采用的是! 类似 struts1 formAction的设计! 对实体进行封装! 然后在实体上面再进行抽象! 因为大概 5-8个实体会组成一个小模块! Abstract BaseAction[顶层Action] | Abstract ModuleAction[模块action] | | | Action_1 Action_2 Action_3 采用的是这种方案。 是不是把实体先封装成一个action 主要是些属性的set方法 用于获取请求提交的参数 然后再按业务分类划分成多个业务action继承对应的实体action |
|
皇室勇少
2010-04-28
一般一个模块会包含5-8个实体[不一定]
所以应该是反过来 |