banq
2008-05-29 10:48
从市场占有情况来看:struts2 in Action 于2008年5月1日刚刚出版,可见,在当前情况,Struts2市场应用根本无法与Struts1相比,当然也无法与JSF相比,我看就是算上以前webwork,勉强和tapestry持平吧。

struts2 in Action英文版下载

http://www.quanpc.com/15656/EJB.aspx

看看struts2的配置:

<package name="example" namespace="/example" extends="struts-default">

<action name="HelloWorld“

class=“sample.HelloWorld">

<result>/HelloWorld.jsp</result>

</action>

</package>

很明显虽然比Struts1少了forward配置,但是多了一个父集更重要的配置package,无疑增加复杂性。

Struts2的Aciton需要继承ActionSupport,这个ActionSupport可以做字段属性:

public class HelloWorldAction extends ActionSupport{

private String message;

public String execute() throws Exception{

...}

..}

虽然execute方法比Struts1简单了,但是由于可以有message这样的字段属性,其实增加性能风险,在我当前编程习惯中,我已经养成缺省尽量不要做字段属性,一旦决定有字段属性要慎重反复考虑,从业务角度确认是不是其天然属性,象Struts2这样任何东东都可以做其字段属性,根本没有任何设计考虑,相当危险,滥用下去会造成内存性能风险。总之这个很违反我的口味。

相反,JSF则比较简洁,将Action嵌入了JSP中,也就没有专门的Action类,属于消灭Action,我觉得这是一个方向,我在2004年的Jdon框架中,对Struts1.x封装中,也就是继承消灭Action的思路,所以,从这个角度来说,JSF更符合我的口味。

Struts2比Struts1虽然实现了细枝末节的简化配置,但是却增加了多余的看似更复杂的配置,所谓按起了葫芦飘起了瓢。其实从这里也可以看出,Struts2只是webwork改头换面的一个产物,其核心还在Struts2的xwork.jar包中,而xwork.jar显然是webwork的工作包。

你们不是嫌Struts1配置复杂吗?我给你一个配置简单的,但不是原来Struts1核心思想的拓展和升级,而是换了一个核心给你,这有点强买强卖吧?群众的眼睛是雪亮,作为消费者和使用者,如果我们再这样被他们这么忽悠,未免太...

[该贴被banq于2008-05-29 11:49修改过]

oojdon
2008-05-29 12:17
国产表现层框架easyjweb,宗旨也是追求大道至简,banq可否评价下?

把jdon的思想借过去,这个框架实现一个模型的CRUD和批量查询只须一个action,这得益于对页面的约定,剔除了类似sturts的页面跳转配置,代码示例:

public class PersonAction extends AbstractPageCmdAction {
        /**
          注射业务bean 
        */
	@Inject
	private IPersonService personService;

	public Page doInit(WebForm f, Module m) {
		return go("list");
	}

 //通过地址栏命令list,new到达约定的list.html,new.html页面
	public void doList(WebForm form) {
		List<Person> list = this.personService.findAll();
		form.addResult("list", list);
	}

	public void doSave(WebForm form) {
		Person p = form.toPo(Person.class);
		this.personService.save(p);
		go("list");
	}

	public void doNew() {
		page("edit");
	}

	public void doEdit(WebForm form) {
		Long id = new Long(form.get("id").toString());
		Person p = this.personService.find(id);
		form.addPo(p);
	}

	public void doDelete(WebForm form) {
		Long id = new Long(form.get("id").toString());
		this.personService.remove(id);
		go("list");
	}

	public void setPersonService(IPersonService personService) {
		this.personService = personService;
	}
}
<p>

如果用这个框架来改写jdon框架,似乎可以做到在表现层更加简捷,当然,和jsf,tapestry这些后期之秀一样,easyjweb的性能比不上struts1,banq老师的意见?

[该贴被oojdon于2008-05-29 12:23修改过]

banq
2008-05-29 14:52
oojdon的帖子有些文不对题,我们这里讨论的是struts1 vs struts2,不是讨论所有表现层框架区别,凡是和Struts无关的不要在这个帖子讨论,谢谢配合。

我先回复几句:你有不同意见请开新贴继续讨论:

你说“这个框架实现一个模型的CRUD和批量查询只须一个action“”,但是,Jdon框架实现一个模型的CRUD,一个action都不需要。,所以,想不出你怎么能得出:“如果用这个框架来改写jdon框架,似乎可以做到在表现层更加简捷”?一个不要写任何Action,一个需要写一个Action,到底谁更加简捷?

你例子中的PersonAction 和struts1的动态Action看不出有何区别,Struts1的Action也可以放很多方法在其中,所以,充其量这个框架易用性和struts1x打个平手(除了DI注射);而Jdon框架则是在Struts1x基础上优化,消灭了Action

我们再看看JSF/Tapestry是怎么消灭Action的,JSF是类似Swing的事件驱动,可以为界面中每个元素添加一个Action,而不是Struts那样一个表单对应一个Action,很明显JSF要灵活细腻多:

<h:commandButton value="Login" action="loginAction"/>

这句就会commandButton这样一个按钮添加一个loginAction的激活事件。而你不必专门编辑一个loginAction,可以通过配置直接导向View一个jsp:

<navigation-rule>

<display-name>login</display-name>

<from-view-id>/login.jsp</from-view-id>

<navigation-case>

<from-outcome>loginAction</from-outcome>

<to-view-id>/welcome.jsp</to-view-id>

</navigation-case>

</navigation-rule>

这就是JSF消灭Action的方式,loginAction只是一个名称,Jdon框架虽然也消灭了Action,但是没有JSF这么简单,因为依赖Struts,所以,在struts-config.xml中配置一下框架中缺省Action:

<action path="/loginAction" type="com.jdon.strutsutil.ModelViewAction" scope="request">

其中com.jdon.strutsutil.ModelViewAction就是缺省Action,可以适合大多数CRUD流程。相当于Jdon框架抽象了CURD的Action方法,具体使用时,自己不要写任何Action,只要用这个缺省Action就可以。

所以,就发展方向,JSF/Tapestry无疑是对的,对于表现层框架:MVC是基本,事件驱动是方向。

关于Struts2实质是webwork的证明,InfoQ早就用“WebWork (Struts 2) In Action”来代指Struts2 in Action:

http://www.infoq.com/presentations/struts-2-webwork-pat-lightbody

相关帖子:

表现层框架Struts/Tapestry/JSF架构比较

http://www.jdon.com/artichect/sjt.htm

Struts2案例开发:

http://www.roseindia.net/struts/struts2/struts-2-format.shtml

[该贴被banq于2008-05-29 15:23修改过]

suzhj
2008-05-29 16:16
没有实际应用过Struts2(Webwork2)的请不要想当然。

Webwork2的精髓在于TypeConverter、Ognl、极具扩展性的插件机制、UI模板、。

至于所谓的无Action的JSF,BackBean是什么东西?我觉得不能因为名称称作Action便去反对,改个名字就是先进。

另外这里Action并不需要去继承ActionSupport,这只是为了方便使用而提供的,好比Jdon的ModelViewAction。这里的action完全是POJO,可用Spring等任意IOC框架来管理。

另外配置文件只是一种选择,Webwork2完全支持注解方式,甚至使用缺省约定的惯例优先即可。

虽然Webwork2本身有Inteceptor和IOC机制,抢了部分的Spring的饭碗,但是这是在Spring出现以前就遗留下来的,可以说是很先进的理念,只不过重点还是MVC而不是IOC,所以这方面的表现不如spring,而且目前完全可以不用。

我是比较反对JSF和Tapestry的UI组件模式,我觉得发展方向应该是UI逻辑和数据分离,browser端使用RIA实现UI,而Server端只提供数据和业务逻辑。事件驱动的UI组件应该在Browser端实现而不是被JSF包装起来搞的性能极差。

[该贴被suzhj于2008-05-29 16:32修改过]

suzhj
2008-05-29 16:27
另外感觉banq有点自卖自夸的意思,处处看出来字里行间都透漏着Jdon框架理念是最优秀的意思。

表现层本来就是复杂的是最难解决的,struts2也没有抢业务层的风头,难道业务层能处理复杂的表现层逻辑吗。

这也是为什么表现层框架远远多于其他层框架的原因。其他层像spring、hibernate都是独领风骚,但是表现层却百家争鸣。

猜你喜欢
7Go 上一页 1 2 3 4 5 ... 7 下一页