Dorado on the way


20061225


今天是圣诞节,进入公司已经四个月了,可是对公司的产品Dorado还几乎是一个门外汉,(我要说明一下,不是我太笨,刚刚进入公司就接受了一个传统项目的开发,再加之学校的事情,在此我想我应该声明一点,我还是一个大四的学生,快结束大学四年的学习了,到最后,乱七八糟的事情实在是太多了,这个报告那个报告的。)

Thomas(我们公司的产品经理),还有范经理,实在是不好意思,还有公司的同事,虽然我比他们中的好多人进入公司都早,可惜我不是最厉害的,至少现在不是。

到上个星期为止,学校的事情基本上已经完了,毕业设计的课题也选了,选的课题是《基于智能Agent的分布式移动计算处理》,本来一开始自作聪明,以为题目为“移动计算”嘛,就是移动设备的计算处理,智能Agent嘛~估计就是一种形式而已,我自从从大学二年级自学Java开始,接触了Java中的JavaSEJavaEE两个体系,正好可以借此课题,让我对JavaME有所了解,也实现了完成毕业设计的作用。结果后来导师选好了以后,看着导师给的材料,我才知道,我陷入泥潭了~(导师,原谅我这么说,呵呵·)

今天是我真正学习Dorado的第一天,公司给了我一些资料,所以我信心十足,我要赶上公司的其他同事,呵呵~争取超过他们哦~已经习惯了要做到最好,我是不是太自大了??

还是跟我学习Java一样,首先在公司的官方网站(http://www.bstek.com/)下载了Dorado的最近版本,我下载的版本是Dorado-5.0 061129.1132,一并还下载了Dorado 5 快速入门,组件使用技巧,当然还有DoradoAPI--我的最爱。

首先看了Benny(我们公司的CTO)录制的两段视频说明,依照Dorado安装自带的doradosample,把dorado的大致功能作了一个讲解说明,个人感觉dorado还是挺有市场前景的,只是需要更大的宣传。

好了,闲话不多说了,开始我的Dorado之旅吧~


首先,需要了解的是:视图模型Dorado开发当中非常重要的对象,它封装了Dorado的界面逻辑和操作逻辑,即主要包含什么数据dataset ,以及这些数据通过什么形式来展现。

下面是我今天学习中,觉得需要注意的一些地方和术语。


  • Dataset

    1. getDataset(“datasetName”) ; 获取对dataset的引用

    2. RecordIterator ri = dataset.recordIterator() ; 获取对dataset的迭代器引用。

    3. dataset的遍历


      1while(ri.hasNext()){
      2Record record = ri.nextRecord() ;
      3// 对每条记录的操作
      4}

      5
      6

      4. 可是通过getControl(“controlName”) ; 获取组件的引用

      注意,这里得到的是Control对象,需要进行类型的强制转换。

    5. ”Module数据坞”的说明。

      1). 数据坞里面的dataset对象可以被不同的视频模型索引用,以达到数据共享的作用。

                    2). Module不应该包含任何的业务逻辑,这是一种良好的设计模式。

                    3). Module的创建和销毁由Dorado提供的容器来管理,可以当做一个Singleton来使用。

                         所以在绝大部分情况下,在Module里面添加非静态的属性都不是正确 (或者是不太明智)的做法。

                     4). Module中的dataset的创建和销毁使用dorado提供的容器来管理的,但开发人员可以强制通过scopetimeout来定制dataset
                          生命周期。

                     5). scope有三种取值,分别是request (默认)session application

                           需要特别注意的是,在同一个request连续以不同pageIndex pageSize parameters的不同组合来获取Module中的dataset,但将获得多个不同的dataset 实例。

                     6). 如果为了提高效率而将scope设置为application ,则应该注意让此dataset中的数据量不要过大。常用在大型系统中的代码表。

6. 通过dataSet.getCurrent() ; 方法,可以从dataSet获取当前记录。由于dataSet具有

当前记录”这个,所以大多数操作都是对“当前数据”来说的。

  • Mapping

    1. 所有的Mapping单元都是通过名为global的管理单元来进行管理的。

            2. 在请求映射的过程中,dorado有着自己独特的,不同于Struts的映射机制,

                  例如:对于请求:action=”access.login.d”

access 与对应的controller的名称一致,

login与对应的action的名称一致。

3. controllerclazz属性所表示的是用于处理这个请求的class ,类似于Struts中的 Action ,而提交的数据,就从Struts 中的ActionFrom转换成了Doradodataset.

4. 对于页面的访问安全控制(即只能通过dorado式的请求,而不容许以文件结构路径来访问,即../demo/XX.jsp),可以将view中的safe属性设置为true来控制。

或者通过dorado默认的setting中的security.accessChecher来控制。不过我可以自主创建一个AccessChecker类型的java类来进行控制。但需要将setting.xml里面的 “security.accessChecker”属性修改为自己创建的类路径。

5. 可以通过DoradoContext来访问dorado的上下文信息,并通过标记量来告诉dorado 的上下文从哪里获取需要的变量。

例如,

Object obj = doradoContext.getAttribute(DoradoContext.SESSION,”username”) ;


  • i18n

    1. 你需要在i18n目录下新建一些I18Nproperties类型文件。此类文件与java中的

    一致,都是以键-值对的形式存在。

    2. dataset中的Fields里面设置为${Resource.fileName.key}的形式进行设置。这个就

    有点类似于JSP2.0中的EL,其中,fileName是资源文件的文件头,不包括_cn_ZH

    等类似的字样。而key是在文件中的键。这些都是在系统的setting.xml中的

    common.locale.language”和“common.locale.country ”来进行的配置。同样,你可

    以通过修改这两个属性来启用不同的I18N文件。

3. 对于动态更改用户的国际化资源的情况,可以使用

LocalHelper.getLocale(“language”,”country”),

ResourceManager.getInstance().setDefaultLocale(context,

DoradoContext.SESSION,

locale) ; 来设置。

  • EL

    JSP2.0方面的书籍中有大量的经典介绍,这里就不再记录。

    开发时,只需记住Dorado内置的隐式变量,即可。

  • Skin

    1. 皮肤文件夹存放的位置是在skins文件夹下面的。

    在使用新皮肤时,只需要修改setting.xml中的view.smartweb2.skin对应的值即可。

    2. 同时可以通过修改skin.css文件来修改dorado中的标签库的所有展示风格。

    3. 同时也支持传统的JSP开发,即在<head>标签中设置相信的各种属性,以完成让

    dorado以用户自定义的形式进行展现。