下一代的B/S開發框架--Echo 教程(8) (轉)

worldblog發表於2007-12-13
下一代的B/S開發框架--Echo 教程(8) (轉)[@more@]

下一代的B/S開發--Echo 教程(8)

資料繫結

喜歡偷懶的人最喜歡資料繫結.

很多桌面開發工具都提供了的資料繫結功能, 很遺憾, Echo還沒有. 在我手頭的專案中, 一個表有上百個欄位, 都要從Form中編輯, 一個頁面不夠, 還要分成幾個頁面來分段輸入. 即使Echo省去了很多麻煩, 還是要從每個TextField中讀資料, 型別轉換後再放到Model中. 於是我寫了一個小巧的繫結工具, 這樣利用Echo, 一個人就能對付這種恐龍級的頁面. 先來看看怎麼用:

User user = new User(); //資料
DataBinr binder = new DataBind(user); //繫結控制器
binder.bind("Name",cmbName); //繫結到下拉選單
binder.bind("Tel",txtTel); //繫結到輸入框

如果在中改變了user的屬性, 可以binder.rebind(). 輸入完畢, 簡單的呼叫binder.update()即可把輸入更新到user上. binder有些小的特性:

  1. 繫結時會利用reflection先嚐試get/set方法, 然後再查詢找可訪問的成員變數.
  2. 自動嘗試在型別轉換, 比如數值, 日期.
  3. 一些特殊控制元件可能無法直接得到它的屬性, 比如ButtonGroup只能返回哪個按鈕被選中. 因此特定的控制元件需要寫來提供虛擬的Property.
  4. 如果需要繫結到變數名而不是具體的, 要把user放倒陣列或者List中再去繫結. 實際上我定義了幾種資料來源, 如果你願意, 可以寫ResultSet/+的資料來源.
  5. 資料來源提供資料導航功能. 允許在資料中瀏覽, 只要簡單的rebind一下即可更新頁面.
  6. 預設對控制元件的Text屬性操作, 但是可以特別指定繫結到其它的屬性上, 比如Visible.
  7. 支援單向繫結: 只讀/只更新.
  8. 一個binder對應一個資料來源, BindGroup對一組binder做統一控制.

Table也有繫結: TableBind. 它的構造是:

TableBind(Bind bs, Table table, String[] fields)

Echo中的Table和Grid有很大的不同. Grid是個類似佈局的容器, 需要往裡面加入Component. 而Table則只容納各種資料, 具體表現成什麼格式需要用到CellRender. 可以做成隔行變色或者把資料變成按鈕. 有了表格的資料繫結. 你就可以專注去寫漂亮的CellRender.

在很多應用中, 經常有變動的主資料. 它們往往體現為下拉選單或者一組單選/多選按鈕. 使用者習慣在輸入資料的時候往往碰到哪個主資料沒有才去開個視窗維護, 然後把新資料反應在剛才輸入的頁面上. 所以我做了一個Manager, 它用快取的主資料, 同時更新所有使用者的頁面, 而不僅僅是當前使用者.

多說幾句:

資料繫結僅僅是偷懶的第一步, 程式碼生成是緊接著的第二步. 以前我們會用一些工具, 針對B/S架構生成一整套的HTML/JS, XML/...這些生成的東西往往會被修改, 再生成的時候再修改... Echo的HTML是動態生成的, 也給我提供一個更高層次的程式碼生成: 只要生成的類, 利用OO的方法來重用或調整它.

換一個角度來思考: 為什麼不利用生成程式碼的資料來源動態生成網頁? 比如根據JC的MetaData得到表的欄位/主鍵/描述資訊. 然後自動構造出一個表的錄入和瀏覽介面. 甚至根據外來鍵資訊構造關聯錄入. 這樣的頁面幾乎面維護, 修改過表結構會馬上體現出來.

另外一個很有有趣的想法是根據資料來構造頁面. 在Notes和SAP開發中, 開發者只要告訴頁面去讀取哪些變數就生成很不錯的介面, 包括下拉選單和資料驗證. 這些變數已經包含了豐富的格式資訊甚至提示資訊. Java也可以做到, 但是還沒看到實現. 可以借用的是Schema, 它的定義很全面, 並且可以靈活擴充. Schema不但能定義單個資料的資訊, 還能定義結構資訊. 也就是說Schema能描述一個介面的要求, 可以作為自動生成介面的標準, 讓程式在讀取Schema的同時構造出相應的Echo介面, 然後直接錄入符合Schema要求的XML. 這樣的功能可以讓我們更方便的利用service, 因為WS的資料描述就是Schema.

以上都是些不成熟的想法, 歡迎討論. 另外資料繫結的程式我會放在一個例子中, 在後面的教程中提供, 僅供參考, 歡迎反饋.

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章