关于flex+spring+hibernate的问题

来源:互联网 发布:台式电脑无法连接网络 编辑:程序博客网 时间:2024/06/09 19:19

(转自:RIACHINA 中国RIA开发者论坛)

问:首先说,我怎么也没找到相关的文章或demo,如果哪位仁兄知道,请给个联结。当然了,如果是高手,请给指点一下,这个结构应该如何做好一些。
看了一些相关的东西,发现需要用as3在客户端建立VO,不知道这样做是否安全,请指教。
谢谢了

 

答:无需建立VO,AS是动态语言,对象可以动态的构建,需要什么就构建什么对象即可。比如服务器传来的是user对象的数据,那么你构造的时候new一个Object,直接可以把这个对象当作user来对待。
当然对于FLEX的框架设计来说,VO能更好的理解数据对象,并规范管理。
另外,关于你这三个框架完全可以当作普通的jsp(struts)+spring+hibernate来做,实际上RIA的思想是一种分布式的结构,展现层和逻辑还有po都是隔离的,服务器只需要最后给它结果,或者执行它的请求即可。因此之前jsp是什么架构,在这里把jsp换成flex即可。(由于服务端不再接管展现层,因此struts框架就是多余的了)
不过,由于两种语言数据不兼容,flex接收的实际上都是从服务器传回的序列化过的文本,比如XML或json,因此传统的页面跳转之类的都不存在,服务器端只需要专心的做业务层,把结果输出或者执行操作,如何组织显示,如何在页面跳转,在服务器端再也不用考虑,这恐怕是设计RIA服务器端和以往的最大不同
你要的demo的确找不到,如果你搜jsp+spring+hibernate肯定一大堆,因为这两个框架从服务器端来说没区别,只是展现层换了,在这个框架的基础上,你需要考虑如何把VO更简单的转换成序列化的文本输出即可(当然你也可以纯手工的在服务器端转换VO),从MVC的设计思想来看,服务器就应该是做这些工作的。

 

问:谢谢cimmicola了。 写的太好了,非常有用。 我还有个疑问就是如果说简单的用flex替换jsp的话,session该怎么做? 这个地方是不是一个区别之处。  还有就是如果真象官方上的example那样,建立一个.as文件里面包括 getuserId(), setuserId()什么的,然后用RemoteClass联结到一个java。这么做是不是不太安全, 至少是把数据库的table结构放到客户端了。请多多指教。谢谢了。

 

答:session目前没有官方的解决方案,通常做法就是请求服务器的session并保存为自己的一个对象。session一般都是不会改变的数据,比如登录用户的信息,设计session的原则尽量是不将业务数据存储进去,因为session 是比较耗资源的。
关键是在flex存储这个session对象,避免反复请求。
可以用shareObject存储起来,但是SO类似于cookie,是存在本地的,如果你的session有敏感数据需要在退出程序时清除SO里的数据。
比如:
so: SharedObject=SharedObject.getLocal("LocalData");
user:Object=....//你从服务器端取得的session
so.data.loginUser=user;
so.flush;
//在其他页面
trace(so.data.loginUser.name);
还有一种方法,利用类的生命周期,将服务器的session设置到一个类的静态属性,我们知道,静态属性是在类被构造时就会有值,而无需实例化这个对象,因此,这个值将是一个长存于内存的变量,即使你没有new这个类,直接取也是可以取得的。而且,由于没有java那样的垃圾回收器,这个类即使数据没有使用,也不会消失。
创建一个类
public class MySession{
    private static var _data:Object=null;
    public static function set data( data:Object){
        _data=data;
    }
    public static function get data():Object{
        return _data;
    }
}
设置MySession.data.loginUser=.....;
AS是动态语言,即使我的MySession类的data属性里,并没有声明什么结构,也不存在loginUser这个属性,但是会自动构造。
另一个问题,如果你觉得这样不安全,你可以不这么做,但是可以肯定的是,数据在某种层次上说,都是透明的,且VO并不等于是数据库结构。我的项目里FLEX都没有VO,我不喜欢在客户端再来映射一次VO,这样让我觉得很烦琐,展现层应该关注的是用户体验和数据展现,他只需要被告知数据结果。至于数据VO,它应该是持久层的东西。我觉得动态语言灵活性是可以好好利用的。

原创粉丝点击