struts ActionForm设计的缺陷

04-09-14 arlaichin
假设我有一个功能是增加联系人记录,这时我会在Module层实现一个:

public class Module{

public void AddContact(Contact c)throws Exception

{

......

}

}

public class Contact{

private String name;

private String address;

......

}

在View层做个页面addContact.htm用来提交ContactForm表单

此时,还要做个Form类来包装表单数据:

public class ContactForm extern ActionForm{

private String name;

private String address;

......

}

这时发现,ContactForm和Contact里面的代码几乎一样,如果能让ContactForm来继承Contact应该是比较理想的设计,但问题是ContactForm又要扩展ActionForm,由于java的类单继承特征,使它不能再继承Contact.还有,在Action调用Module时,又要把ContactForm转换成Contact.

如果ContactForm可以继承Contact或直接把Contact来作为Form类的话,在设计上和代码编写上就会精简很多.

欢迎大家谈谈自己的看法.

    

yellow_eyes
2004-09-14 17:02
我觉得到不是问题.

formbean只是jsp中form的一个数据映射,它负责完成数据从jsp到后台的获取.和你后台处理持久的类毫无关系.如果没有formbean,你一样要写一堆属性和getParameter...

我觉得他们是不同层面的对象,不能说那个是多余的

banq
2004-09-15 13:12
这两者是类似,我认为有优点也有缺点。

优点是MVC模式,ActionForm属于V,而Contact等属于Model,这样分层清楚,很多设计都要依赖Model,这样,可以摆脱对界面的依赖。

缺点是麻烦,自己做个框架或自动工具来实现吧。

SportsBaby1980
2004-09-15 13:46
在这里,有一个比较好的办法

就是让Form持有一个该model的实体----但仅是普通的Object而已

再 把 model中要在页面中用到的属性,在Form中再声明一次

public class Contact{
  private String name;
  //setter
  //getter
}
public class ContactForm extends ActionForm{
  private Contact contact;
  
  //contact setter
  //contact getter
  public String getName(){
    return contact.getName();
  }
  public void setName(String name){
    this.contact.setName(name);
  }
}
<p>

如果你的开发工具支持 ContactForm 中的那些getter setter可以自动生成。

hef
2004-10-12 18:45
Struts的作者怎么会把这样的问题给拉下呢,试试

org.apache.commons.beanutils的工具

BeanUtils.copyProperties()

可以把一个Object的属性复制到另外一个Object,并能实现自动类型转换

猜你喜欢
2Go 1 2 下一页