?

Dorado on the way


20061225


今天是圣誕節(jié),進(jìn)入公司已經(jīng)四個(gè)月了,可是對(duì)公司的產(chǎn)品Dorado還幾乎是一個(gè)門(mén)外漢,(我要說(shuō)明一下,不是我太笨,剛剛進(jìn)入公司就接受了一個(gè)傳統(tǒng)項(xiàng)目的開(kāi)發(fā),再加之學(xué)校的事情,在此我想我應(yīng)該聲明一點(diǎn),我還是一個(gè)大四的學(xué)生,快結(jié)束大學(xué)四年的學(xué)習(xí)了,到最后,亂七八糟的事情實(shí)在是太多了,這個(gè)報(bào)告那個(gè)報(bào)告的。)

Thomas(我們公司的產(chǎn)品經(jīng)理),還有范經(jīng)理,實(shí)在是不好意思,還有公司的同事,雖然我比他們中的好多人進(jìn)入公司都早,可惜我不是最厲害的,至少現(xiàn)在不是。

到上個(gè)星期為止,學(xué)校的事情基本上已經(jīng)完了,畢業(yè)設(shè)計(jì)的課題也選了,選的課題是《基于智能Agent的分布式移動(dòng)計(jì)算處理》,本來(lái)一開(kāi)始自作聰明,以為題目為“移動(dòng)計(jì)算”嘛,就是移動(dòng)設(shè)備的計(jì)算處理,智能Agent嘛~估計(jì)就是一種形式而已,我自從從大學(xué)二年級(jí)自學(xué)Java開(kāi)始,接觸了Java中的JavaSEJavaEE兩個(gè)體系,正好可以借此課題,讓我對(duì)JavaME有所了解,也實(shí)現(xiàn)了完成畢業(yè)設(shè)計(jì)的作用。結(jié)果后來(lái)導(dǎo)師選好了以后,看著導(dǎo)師給的材料,我才知道,我陷入泥潭了~(導(dǎo)師,原諒我這么說(shuō),呵呵·)

今天是我真正學(xué)習(xí)Dorado的第一天,公司給了我一些資料,所以我信心十足,我要趕上公司的其他同事,呵呵~爭(zhēng)取超過(guò)他們哦~已經(jīng)習(xí)慣了要做到最好,我是不是太自大了??

還是跟我學(xué)習(xí)Java一樣,首先在公司的官方網(wǎng)站(http://www.bstek.com/)下載了Dorado的最近版本,我下載的版本是Dorado-5.0 061129.1132,一并還下載了Dorado 5 快速入門(mén),組件使用技巧,當(dāng)然還有DoradoAPI--我的最?lèi)?ài)。

首先看了Benny(我們公司的CTO)錄制的兩段視頻說(shuō)明,依照Dorado安裝自帶的doradosample,把dorado的大致功能作了一個(gè)講解說(shuō)明,個(gè)人感覺(jué)dorado還是挺有市場(chǎng)前景的,只是需要更大的宣傳。

好了,閑話不多說(shuō)了,開(kāi)始我的Dorado之旅吧~


首先,需要了解的是:視圖模型Dorado開(kāi)發(fā)當(dāng)中非常重要的對(duì)象,它封裝了Dorado的界面邏輯和操作邏輯,即主要包含什么數(shù)據(jù)dataset ,以及這些數(shù)據(jù)通過(guò)什么形式來(lái)展現(xiàn)。

下面是我今天學(xué)習(xí)中,覺(jué)得需要注意的一些地方和術(shù)語(yǔ)。


  • Dataset

    1. getDataset(“datasetName”) ; 獲取對(duì)dataset的引用

    2. RecordIterator ri = dataset.recordIterator() ; 獲取對(duì)dataset的迭代器引用。

    3. 對(duì)dataset的遍歷


      1while(ri.hasNext()){
      2Record?record?=?ri.nextRecord()?;
      3//?對(duì)每條記錄的操作
      4}

      5
      6

      4. 可是通過(guò)getControl(“controlName”) ; 獲取組件的引用

      注意,這里得到的是Control對(duì)象,需要進(jìn)行類(lèi)型的強(qiáng)制轉(zhuǎn)換。

    5. ”Module數(shù)據(jù)塢”的說(shuō)明。

      1). 數(shù)據(jù)塢里面的dataset對(duì)象可以被不同的視頻模型索引用,以達(dá)到數(shù)據(jù)共享的作用。

????????????????????2). Module不應(yīng)該包含任何的業(yè)務(wù)邏輯,這是一種良好的設(shè)計(jì)模式。

????????????????????3). Module的創(chuàng)建和銷(xiāo)毀由Dorado提供的容器來(lái)管理,可以當(dāng)做一個(gè)Singleton來(lái)使用。

?????????????????????????所以在絕大部分情況下,在Module里面添加非靜態(tài)的屬性都不是正確 (或者是不太明智)的做法。

?????????????????????4). Module中的dataset的創(chuàng)建和銷(xiāo)毀使用dorado提供的容器來(lái)管理的,但開(kāi)發(fā)人員可以強(qiáng)制通過(guò)scopetimeout來(lái)定制dataset
??????????????????????????生命周期。

?????????????????????5). scope有三種取值,分別是request (默認(rèn))session application

???????????????????????????需要特別注意的是,在同一個(gè)request連續(xù)以不同pageIndex pageSize parameters的不同組合來(lái)獲取Module中的dataset,但將獲得多個(gè)不同的dataset 實(shí)例。

?????????????????????6). 如果為了提高效率而將scope設(shè)置為application ,則應(yīng)該注意讓此dataset中的數(shù)據(jù)量不要過(guò)大。常用在大型系統(tǒng)中的代碼表。

6. 通過(guò)dataSet.getCurrent() ; 方法,可以從dataSet獲取當(dāng)前記錄。由于dataSet具有

當(dāng)前記錄”這個(gè),所以大多數(shù)操作都是對(duì)“當(dāng)前數(shù)據(jù)”來(lái)說(shuō)的。

  • Mapping

    1. 所有的Mapping單元都是通過(guò)名為global的管理單元來(lái)進(jìn)行管理的。

????????????2. 在請(qǐng)求映射的過(guò)程中,dorado有著自己獨(dú)特的,不同于Struts的映射機(jī)制,

??????????????????例如:對(duì)于請(qǐng)求:action=”access.login.d”

access 與對(duì)應(yīng)的controller的名稱(chēng)一致,

login與對(duì)應(yīng)的action的名稱(chēng)一致。

3. controllerclazz屬性所表示的是用于處理這個(gè)請(qǐng)求的class ,類(lèi)似于Struts中的 Action ,而提交的數(shù)據(jù),就從Struts 中的ActionFrom轉(zhuǎn)換成了Doradodataset.

4. 對(duì)于頁(yè)面的訪問(wèn)安全控制(即只能通過(guò)dorado式的請(qǐng)求,而不容許以文件結(jié)構(gòu)路徑來(lái)訪問(wèn),即../demo/XX.jsp),可以將view中的safe屬性設(shè)置為true來(lái)控制。

或者通過(guò)dorado默認(rèn)的setting中的security.accessChecher來(lái)控制。不過(guò)我可以自主創(chuàng)建一個(gè)AccessChecker類(lèi)型的java類(lèi)來(lái)進(jìn)行控制。但需要將setting.xml里面的 “security.accessChecker”屬性修改為自己創(chuàng)建的類(lèi)路徑。

5. 可以通過(guò)DoradoContext來(lái)訪問(wèn)dorado的上下文信息,并通過(guò)標(biāo)記量來(lái)告訴dorado 的上下文從哪里獲取需要的變量。

例如,

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


  • i18n

    1. 你需要在i18n目錄下新建一些I18Nproperties類(lèi)型文件。此類(lèi)文件與java中的

    一致,都是以鍵-值對(duì)的形式存在。

    2. dataset中的Fields里面設(shè)置為${Resource.fileName.key}的形式進(jìn)行設(shè)置。這個(gè)就

    有點(diǎn)類(lèi)似于JSP2.0中的EL,其中,fileName是資源文件的文件頭,不包括_cn_ZH

    等類(lèi)似的字樣。而key是在文件中的鍵。這些都是在系統(tǒng)的setting.xml中的

    common.locale.language”和“common.locale.country ”來(lái)進(jìn)行的配置。同樣,你可

    以通過(guò)修改這兩個(gè)屬性來(lái)啟用不同的I18N文件。

3. 對(duì)于動(dòng)態(tài)更改用戶的國(guó)際化資源的情況,可以使用

LocalHelper.getLocale(“l(fā)anguage”,”country”),

ResourceManager.getInstance().setDefaultLocale(context,

DoradoContext.SESSION,

locale) ; 來(lái)設(shè)置。

  • EL

    JSP2.0方面的書(shū)籍中有大量的經(jīng)典介紹,這里就不再記錄。

    開(kāi)發(fā)時(shí),只需記住Dorado內(nèi)置的隱式變量,即可。

  • Skin

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

    在使用新皮膚時(shí),只需要修改setting.xml中的view.smartweb2.skin對(duì)應(yīng)的值即可。

    2. 同時(shí)可以通過(guò)修改skin.css文件來(lái)修改dorado中的標(biāo)簽庫(kù)的所有展示風(fēng)格。

    3. 同時(shí)也支持傳統(tǒng)的JSP開(kāi)發(fā),即在<head>標(biāo)簽中設(shè)置相信的各種屬性,以完成讓

    dorado以用戶自定義的形式進(jìn)行展現(xiàn)。