请教Struts架构设计问题:DAO + VO + (Struts)Action + (Struts)ActionForm

sharedata 2003-10-10 09:35:45
我在做Struts方面的架构设计,我原本的打算是仅仅使用Struts的Action而不使用ActionForm,也就是DAO + VO + (Struts)Action(不包括其他的非关键的类的情况下),这样我充分的利用了Struts的Control而减少了一些代码工作,实际上,这相当于自己写的框架只是用别人的现成的一些东西。
但我同事说这样理解困难而我自己也没有多少Struts的实际的经验,故放弃这样做的设计方式。采用保守的方式如下:DAO + VO + (Struts)Action + (Struts)ActionForm(不包括其他的非关键的类的情况下),但是这里也有一些问题:
1:VO 和 (Struts)ActionForm 都是对数据的封装,所以功能有重复的地方,怎么样做到如下要求呢?
(1):避免拷贝、粘贴代码的方式写这两个类,虽然不是我写代码,但我不希望增加程序员的工作,并且这样的维护是有些问题的,需要维护相同的代码2份;
(2):假设我在 (Struts)ActionForm 中对 VO 进行代理的访问,也是增加了和(1)差不多的手工代码;
(3):假设我使用 VO 扩展 (Struts)ActionForm 并实现序列化的话,我的 VO 仅仅是个空类,这样我觉得不好;
(4):对于(3),还有一个很重要的问题就是,两者的功能重复,那么程序员使用的时候很可能混合使用这两个类,这是不好的做法。
2:我的同事对于 VO + DAO 接触少,所以问我这样的好处在哪里?我觉得在于提高网络传输效率、结构的清晰和扩展容易(如扩展到EJB)。你觉得呢?
3:我还是在 VO 和 (Struts)ActionForm 有些拿不定主意,我不希望过分的绑定到Struts,也不希望多写手工的代码,更不希望结构的不清晰。

我是懒人,希望一次做好事情。说说你的看法吧,我对Struts缺少经验。
...全文
618 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
huisky 2004-03-15
  • 打赏
  • 举报
回复
从DAO层取出来的VO(LIST)转成VIEW层使用的FROMBEAN(LIST)
应该放在哪里?怎么处理?
jiganghao 2004-03-15
  • 打赏
  • 举报
回复
reasons why ActionForm should stay with presentation layer:

-- as I said before, ActionForm imports Servlet API. So it cant be passed out the the JVM. For a distributed system, you have to pass the value to another machine and/or layer by DO.

-- if you pass form bean to business layer, than business layer is cant run without a web server. your business logic DEPENDS ON the web server JVM :(

-- unless you use webRunner or Http mockup objects, you cant do unit test.

...
duan123 2004-03-15
  • 打赏
  • 举报
回复
学习
yuzhouheng 2004-03-13
  • 打赏
  • 举报
回复
补充一点:在PageVO里用List存储了ActionForm
list.add(ActionForm);
yuzhouheng 2004-03-13
  • 打赏
  • 举报
回复
我也遇到同样的问题,用DAO + VO + (Struts)Action + (Struts)ActionForm还是刚不久用到的,我只用了一个ActionForm里面封装了所有数据库字段,这样做是为了从表示层传送递一个统一接口数据,向JSP层传送数据用的是从sun网站抄袭来的PageVO 主要是实现分页技术,我把它扩展了一下,也就是jsp传来的都是actionForm,传向JSP都是pageVO ....这样做有什么缺点吗,请各位大哥指点!
zhaolihhy 2004-03-10
  • 打赏
  • 举报
回复
关注
xuu27 2004-03-05
  • 打赏
  • 举报
回复
mark
zeroplus 2004-02-28
  • 打赏
  • 举报
回复
我以后也到这儿问问题,高手太多了!:)
sagittarius1979 2004-02-24
  • 打赏
  • 举报
回复
精华贴
收藏
mmhhllRen 2004-02-24
  • 打赏
  • 举报
回复
有着功能为什么不用,晕。
yeshucheng 2004-02-24
  • 打赏
  • 举报
回复
好贴子
Shrewdcat 2004-02-23
  • 打赏
  • 举报
回复
任何一种架构没有觉得好与坏,应用场合不同,所能体现的性能自然也不同,不可能存在各个方面均设计优良的架构。一个好的架构,是和具体的项目紧密结合的,失去了架构存在的大环境,自然也就失去了架构设计的意义。

我们的目标就是明确各个架构的利弊,找出在什么情况下,更合适采用它。这才是问题的根本。
水电费123343 2004-02-21
  • 打赏
  • 举报
回复
你可以将formbean分为两部分 1。与vo/po相同的也就是要持久的部分,另一部分是显示曾需要而有不许要持久的,。然后你可以通过属性拷贝快速的复制数据到vo/po中。

v --formbean
--vo/po
让他门实现同意个接口。
huyuefox 2004-02-21
  • 打赏
  • 举报
回复
vo只是反映业务数据的全貌罢了,actionform则还会包含各种与操作相关的属性,比如显示层的任何操作
qilin 2004-02-20
  • 打赏
  • 举报
回复
推荐使用Torque最为数据持久层
k365 2004-02-20
  • 打赏
  • 举报
回复
ok
genstonechye 2004-01-06
  • 打赏
  • 举报
回复
wrap封装
vo封装formbean

formbean属于view layer
vo和dao属于数据持久层
不可多层偶合
要考虑formbean修改(经常发生),数据层不改变
数据层改变,formbean不变的情况
sharedata 2004-01-06
  • 打赏
  • 举报
回复
可以拓展话题到 DAO 模式下对事务的处理,也可以更拓展的探讨事务处理。

谢谢上述所有的朋友们!
raymond323 2004-01-05
  • 打赏
  • 举报
回复
up
xlongbuilder 2003-12-15
  • 打赏
  • 举报
回复
sign
加载更多回复(43)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧