?

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以用戶自定義的形式進行展現。