论坛首页 Web前端技术论坛

show一下我自己的框架,并和dwr做一简单比较

浏览 15758 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-15  
SigmaFrameWork的主要特征:
1、是一个Action-Based的MVC框架,在Action执行后,根据return的值,自动调用某个result。主要的result有:IncluderResult,DespatcherResult和JsMarshallerResult。其中IncluderResult,DespatcherResult都是用来展示视图的,JsMarshallerResult是用来把action的结果转换成js对象的。
2、在浏览器端可以通过访问actionName!method.action 之类的连接获得复杂对象图,并通过一个js组件SigmaForm把整个对象图设置到form中,不需要一个个属性去设置。
3、浏览器提交数据的时候,可以通过js脚本sigmaform.getValue()获得在浏览器上编辑后的对象图,并且通过toString()方法转换成字符串,然后用xmlhttp提交这个字符串。
4、在服务器端的action里面直接获得对象图:action.parameters.getValue(parameterKey,clazz)来的到浏览器提交的对象图。
5、集合对象的提交。框架中包含了一个grid组件,可以在其中编辑一个对象集合。然后用grid.getValue()获得对象数组,用toString()把对象数组变成字符串之后提交。
6、服务器段获得对象集合:action.parameters.getGridValue(parameterKey,clazz)
7、传输之前的对象图裁减功能,以订单对象为例,其中关联到的对象有:业务员,制单员,客户,还有一个订单明细对象集合,其中订单明细对象又关联到:商品、计量单位、货币等等;另外制单员、业务员还会关联到很多其他对象上。像这样的一个对象图如果不裁减直接全部序列化:从lazyLoad关联对象开始、然后执行jsmarshaller、再传输到浏览器,性能将十分低下。因此对象图裁减是必须的功能。在我们的框架中,可以在mvcContext.xml中配置从java实体到js对象的映射策略,配置语法如下:<map class="com.talentsoft.train.entity.User" include="id,name,age"/>。既可以配置全局策略,也可以针对某个result配置。

比dwr如何?我想还是有一定优势:
1、dwr把ui操作相关的逻辑部分地放到service,导致service方法太细,service过于臃肿。假如你以前编程对类的规模有一个大致的限制的话,估计用了dwr,你会止不住写一个很大的service。
2、dwr在处理java对象到js对象的映射的时候也不够灵活,似乎某个实体只能有一种映射策略。假如列表中的实体和编辑界面中的实体有相同的映射策略,估计列表数据加载时会很慢。
3、dwr把js映射到java对象的时候支持对象图的映射么?没有测试过,但看zkj_beyond的帖子,感觉好像不行。那样的话,保存复杂对象时又麻烦了,比如:销售订单。


   发表时间:2006-09-15  
大致看了下,
dojo.io RPC的支持和你类似。
问题是需要一个MVC框架,我不知道你是基于什么框架做的,但springMVC做会很容易。
spring提供的所有功能都可以直接用了。
尤其是
http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html#mvc-handlermapping
爽。
POJO to json spring IOC很容易配置.


DWR最大的好处是,基本可以抛弃传统的MVC.

想想晚上再回复.
0 请登录后投票
   发表时间:2006-09-16  
这个MVC框架式我自己做的,不算js文件的话,第一版从设想到成形断续持续了大概2周时间,后来在应用中逐步完善,总共包含了20几个java文件,简单易学。有一定java基础的人最多1周内掌握了。而且够敏捷,有新的需求随时就增加上去了。不象大牌开源的MVC框架,太复杂,学习成本高,在公司内推广不易,功能调整也不是那么方便。

至于dwr完全抛弃MVC,我觉得很多情况下不适用。假如抛弃了MVC,是不是得尽量做成one page application?假如那样的话,大型的应用估计吃不消,浏览器端内存消耗的厉害。还有就是service太胖了。我们用这套框架开发了几套针对特定行业的进销存系统,在电信托管供企业租用的。从开发速度和执行性能上来看都非常出色。通常第一个迭代可以在2个月内完成,第三个月发布正式版。压力测试情况:2cpu、2G内存的服务器、jbossweb作为web容器,在100个并发用户下平均4秒左右完成一个复杂请求(报表模块除外)。

spring的mvc没用过,之前用的webwork。其实我的这个MVC和webwork的基础功能有点像,都有action和result的。但是我另外引入了从java 到 json的可配置管理功能,另外增加了json到java的自动构造功能。
0 请登录后投票
   发表时间:2006-09-16  
浏览了下spring 的mvc,太复杂了,而且不见得能提交复杂的对象图,还得用dto,然后用dto里面的refObjId来表达关联。至于像浏览器返回对象图支持的也不强,没见到能配置java对象到js对象的映射策略。也许我看得太粗了。这么复杂,实在没耐心看仔细。
0 请登录后投票
   发表时间:2006-09-16  
其实我们谈论的出发点不一样。我想得是放弃传统的MVC,不想写action,js直接调用service。当然只是想法,很快我会做个demo出来。

DWR也有简单的IOC容器的,类似mvcContext.xml中配置从java实体到js对象的映射策略DWR都支持,支持的很全面,基本和JSON差不多,还可以自定义映射策略。


提交复杂的对象图,DWR也可以做,可能更简单,没有action。

dwr完全抛弃MVC,其实并不是完全放弃,它也有servlet,也可以扩展,但没有action。
0 请登录后投票
   发表时间:2006-09-16  
zkj_beyond 写道
其实我们谈论的出发点不一样。我想得是放弃传统的MVC,不想写action,js直接调用service。当然只是想法,很快我会做个demo出来。

放弃action的理由是什么?闻到什么味道让你决定放弃的。你把ui相关逻辑放到service端,会让我闻到big class的味道。

zkj_beyond 写道

DWR也有简单的IOC容器的,类似mvcContext.xml中配置从java实体到js对象的映射策略DWR都支持,支持的很全面,基本和JSON差不多,还可以自定义映射策略。

好像dwr可以制订全局的映射策略,但能不能针对某个请求制订个性的映射策略呢?

zkj_beyond 写道

提交复杂的对象图,DWR也可以做,可能更简单,没有action。

我看到你上次提到dwr的帖子中,似乎需要请回dto,所以感觉不能提交复杂的对象图。在我们的框架中提交订单的时候是这样的:
var order = orderForm.getValue();
var items = grid.getValue();
ajaxReq.setParameter("order",order);
ajaxReq.setParameter("items",items);
ajaxReq.send();

服务器端:
SaleOrder order = parameters.getValue("order",SaleOrder.class);
Set items = parameters.getGridValue("iterms",SaleOrderItem.class);
order.setItems(items);

orderForm不是原始的html form,而是一个包含了html form元素的js对象,grid是表格编辑空间。被提交的order对象包含了多个其他对象的引用,比如客户、业务员。items是订单明细的集合,集合众每个元素也包含多个关联对象(商品、计量单位、货币等)。不知道dwr是如何更简单地提交复杂对象图的。


DWR到底适合干什么?得看它自己是什么?DWR是一个js rpc框架。仅仅依靠一个rpc是否能够开发一个复杂的应用系统,或者这个rpc只能在特定场合为应用系统作一些补充?
0 请登录后投票
   发表时间:2006-09-16  
hexiaodong 写道
zkj_beyond 写道
其实我们谈论的出发点不一样。我想得是放弃传统的MVC,不想写action,js直接调用service。当然只是想法,很快我会做个demo出来。

放弃action的理由是什么?闻到什么味道让你决定放弃的。你把ui相关逻辑放到service端,会让我闻到big class的味道。

首先我的所有想法是假设,是为下个项目试验。
如果我还用webwork/springMVC的话,我也不会深入研究这些东西了,不管是你们自己的框架,还是dwr之类,都可以完成工作。
当然ajax不能用到所有项目,咋们讨论前提必须是放到使用 ajax前提下。但使用的力度不一样,也会造成误解的。

我提几个问题:
    你的ajax是同步还是异步?你觉得异步对于你有用吗?
    你的应用会后台偷偷的提交数据吗?
    ajax只是无刷新提交吗?似乎你们最关注的是这个?
    所有的传统mvc都有个转发,也就是webwork result.这个在ajax中别扭吗?
    你的浏览器和服务器端交互的是数据还是内容?
    你的action的职责是什么,用javascript实现这些代码行不?



随便想的,我的思路还没成型。过几天拿个东西出来。但有个前提,我的思路不能用在大部分应用。可能在这个帖子讨论给你跑题了。
   
0 请登录后投票
   发表时间:2006-09-16  
恩,在浏览器上实现MVC是一个有趣而又有意义的试验。希望能分享到你的试验结果,并得到一些有益的启示。
0 请登录后投票
   发表时间:2006-09-16  
接着回答你的问题。
ajax用的是异步方法;
极少偷偷提交数据;只有偷偷提交数据的时候异步才有必须的;
ajax不仅仅是无刷新提交,我们用js处理了很多界面逻辑,xmlhttprequest只是用来获取或者提交对象(对象图);
传统的mvc需要的那个转发,你指的是dispatcher么?我们的result不仅仅只有DispatcherResult,最常用的是JsMarshallerResult,把浏览器需要的数据根据映射策略自动转换成json对象;这个result并不涉及到转发。不是转发到jsp,然后jsp装配json对象。
我们的框架中,浏览器从服务器获取的既有页面又有纯粹的对象或者对象图。提交的都是json对象;
action主要有三个职责:1、根据请求生成下一步操作界面;2、根据请求,调用service处理浏览器传过来的对象图;3、根据请求传回用service获得的对象图。的确可以用js来实现大部分功能的。
0 请登录后投票
   发表时间:2006-09-17  
能和我说说为什么这个框架要和dwr进行比较吗?
我一直认为dwr只是一个辅助mvc进行web异步调用的工具包。

另外,项目的地址貌似没有贴
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics