锁定老帖子 主题:我为什么不用struts
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-14
最后修改:2011-04-14
在我眼里,struts还有几个关键的缺点,所以我用了3-5个项目后就不用了。 主要的缺点有这么些: 1、输入输出变量范围定义不清晰。在一个action中,所有输入输出变量都是作为对象变量存在的,既无法区分某个变量是属于哪个方法的,也不能区分哪个变量是输入变量还是输出变量。有人说,我每个请求都用单独的action来处理不就行了。这个办法的确可以区分每个请求之间的输入输出,但是你会面临action数量急剧膨胀的问题。 输入输出变量定义不清晰的带来的问题是代码可读性比较差。使用struts的时候,极端情况下,你得把jsp+action+js结合起来看才能确定某个请求有哪些输入输出。这对项目的维护者来说实在是件很痛苦的事情。
2、struts在处理ajax请求的时候太不方便了,虽然你可以配置一个插件让strus具备返回json result的功能。但是目前的插件距离我的实际需要还是有差距的。主要的问题在于,struts现有的json插件不能定义java对象序列化到json对象时的映射策略。就拿User对象来说吧,假如我目前设计的是订单界面,订单又引用了User对象作为订单的制单人属性。那么在序列化Order对象到前端的时候,我只需要序列化User对象的id,name就够了,user对象的其他属性可以统统不要。但我如果在维护用户的模块中,显示用户列表的时候,通常要显示用户对象的大部分属性。因此java对象到json对象的序列化策略应该是运行时动态设定的,不可能用annotation来申明。但struts以及struts插件并没有提供运行时根据请求为某个类选择不同映射策略的功能。
struts2,学习成本不可谓不高,功能不可谓不强大,但不符合我的需求。
学习strus2,假如不花个把月时间静下心来学习和实践,估计没人敢说自己精通strus2了。但mvc真的有必要那么复杂么?
mvc是什么?他应该能干什么?他的核心价值在哪?最小的mvc应该包含哪些功能?我们自己写一个mvc如何?自己写一个mvc框架需要超过一个月时间么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-15
最后修改:2011-04-15
你说的两个问题,可以归纳为:
1:Struts2 的Action是有状态的,存在成员变量; 2:Struts2 不能很好地支持json/xml甚至jpg等格式的输出; 你这两个问题,可以使用Spring MVC 3 来解决,但是如果使用Spring MVC 3,又引入一个致命的问题:Spring MVC 3 使用annotation可以把藏在任意层次的类映射到一个url上,这样,如果项目管理人员无法强制约束组员的命名风格和包路径存放规范,会造成到看到一个url,到处去找其对应的控制器类的问题。 使用struts2-convention-plugin 就不会有这个问题,因为它是使用约定的,你不按照约定来存放和命名action,你的url根本就无法访问,程序也运行不起来。 另外,Struts2所使用的模型驱动还有一个问题:当你的页面输入框内输入的数据类型,和实体类定义的数据类型不一致时(比如实体类A字段类型为Integer,而页面上为该字段输入了aaa),提交页面,Struts2既不报错,也不能执行,程序根本就不会进入Struts2的方法(使用struts2-convention-plugin 时),这是一个大问题。 但是和Spring MVC 3 的包路径无约束造成的项目混乱相比,Struts2的种种缺点我还是忍受了。 所以综合上述,我还是选择了Struts2 |
|
返回顶楼 | |
发表时间:2011-04-15
只用jsp的飘过!
|
|
返回顶楼 | |
发表时间:2011-04-15
抬个板凳等打架~
|
|
返回顶楼 | |
发表时间:2011-04-15
不如试试 Nutz
|
|
返回顶楼 | |
发表时间:2011-04-15
第二点我说一下
你完全可以在对应的bean中写一个toJsonObject的方法来实现, 比如 propertyToJson、keyDateToJson 这一类方法,在你需要的时候调用对应的方法返回json。 |
|
返回顶楼 | |
发表时间:2011-04-15
才能确定某个请求有哪些输入输出。
这个完全可以通过你的编码习惯跟编码注释来进行控制。 |
|
返回顶楼 | |
发表时间:2011-04-15
我还是比较支持springMVC 3.0
|
|
返回顶楼 | |
发表时间:2011-04-15
不知道不用strut的兄弟都用些什么?
|
|
返回顶楼 | |
发表时间:2011-04-15
struts2不行,lz可以退回去用struts1嘛
|
|
返回顶楼 | |