我是FE,也是Fe

          前端來源于不斷的點滴積累。我一直在努力。

          統計

          留言簿(15)

          閱讀排行榜

          評論排行榜

          架構之路(3)-永恒的話題-CRUD

          前面說過所謂的業務大多數是crud。那從這個入手,我發現要把這個配置出來,配置的結果不言而喻,能生成crud的頁面。我們其實只需要一些元數據(meta information)。元數據就相當于我們平常用的hibernate 里面的cfg.xml之類的東西。用來描述實體/字段的一些信息。從業務的需要來講,單憑這個xml的配置還不能生成crud的頁面。還需要很多的信息。下面是這些字段信息的整理。

          TABLENAME

          表名
          TCOLUMNSNAME 表字段名
          TCOLUMNSTYPE 表字段類型
          ECOLUMNSNAME 實體字段名
          ECOLUMNSTYPE 實體字段java類型
          COLUMNSLENGTH 字段長度
          COLUMNSNULLABLE 是否允許為空
          ISPRIMARYKEY 是否主鍵
          STATE 啟用狀態
          DESCRIPTION 描述
          COLUMNID 字段序號
          LABELTEXT 字段label名稱
          DEFAULTVALUE 字段默認值
          CANSEARCH 是否為查詢字段
          SEARCHINPUTTYPE 查詢呈現方式,文本框/下拉框/..
          SEARCHOPERATOR 默認查詢運算符,等于/大于/..
          FORMAT 字段顯示格式,日期格式/小數格式/貨幣格式
          CSSCLASS 呈現css class
          READONLY 編輯時是否只讀
          EDITINPUTTYPE 編輯呈現方式 文本框/下拉框/..
          CREATESHOW 新增時是否顯示
          UPDATESHOW 更新時是否顯示
          VIEWSHOW 查看時是否顯示
          BLANKMSG 值為空警告
          VALIDATETYPE 校驗類型,小數/整數/正整數/..
          INVALIDMSG 校驗不通過警告
          MAPPING 數據字典,其實就是配置下拉框的通用的數據源。比如通常{1:是,0:否}。
          MAXVALUE 最大值
          MINVALUE 最小值
          VALIDATEOP 校驗比較類型
          VALIDATETO 校驗比較對象表達式
          VALIDATEREGEXP 校驗正則表達式
          VALIDATEIF 校驗禁用條件
          CTABLE 約束表,這4個屬性生成下拉框數據源。
          CCOEDECOLUMN 約束值字段
          CVALUECOLUMN 約束文本字段
          CCONDITION 約束文本字段

          我估計很多人看了這些屬性后笑了,的確,很多人這么做過。后來發現這樣做很不靈活,無法滿足需要,其實這個問題很簡單,為什么不應用一種表達式,ognl,el之類的表達式放在配置項里,這些屬性就靈活很多。siebel這樣的產品,不也有一些地方需要些一個腳本,比如escript之類的東西么。想想我們天天琢磨的業務,不就是這些東西么。把它配置到數據庫里面,接下來就是怎么生成頁面的么。我看到的目前大多數的做法是做一個代碼生成器,我認為這種做法很不好,代碼生成器本身是解決了很多機械活,但是關鍵還是你生成的代碼本身的質量。沒錯,你可以用代碼生成器去免去上萬行代碼要手寫的尷尬,我不僅要問,為什么會弄成上萬行的代碼?有的人還喜歡吹噓我寫過上萬行的Java代碼,我更是嗤之以鼻,這不是你的驕傲,這恰是你的悲哀。上萬行的代碼,我見過的有兩種可能性,一個是java/jsp代碼沒有重構,沒有封裝。二是數據庫的設計有問題,一個表200個字段,頁面能不復雜么。第一種是架構師要解決的問題,第二種那據是設計時要注意的事情了。扯遠了。界面是怎么出來的。至少不是用代碼生成器跑出來的。接觸過ruby on rails 或者grails的朋友肯定知道里面的activerecord/scanffold組合快速實現crud。不過他說白了也是在生成頁面+改代碼,我還是不喜歡。因為界面確實是太靈活。我的思路分兩個個方面入手:1.封裝字段,根據上述字段屬性封裝成jsp的tag。這個tag通過字段名讀取元數據屬性,生成瀏覽器執行的html,javascript。2:所謂頁面不久是指定這個頁面有哪幾個字段不就得了。查詢頁面,那幾個字段是查詢條件,讀取字段的查詢屬性。編輯頁面,無非是指定編輯哪些字段就行,在這個基礎上做一個小工具,頁面就很容易出來。當然,好的框架還要解決一個問題,就是變更。怎樣能以最少的代價做變更。這個我是這么想的。比如說,某個表刪除一個字段,我們可以提供一個工具查詢哪些頁面引用了這個字段,然后用程序一并刪除,其實這個實現也不難,因為每個字段無非就是jsp頁面的一個tag么。大不了用個全文搜索。用正則一替換就完了。

          上面是我總結的快速實現crud的一些想法。這部分其實是很多重復性勞動的根源,把這些工夫省下來了。開發效率高很多。

          posted on 2009-12-25 16:52 衡鋒 閱讀(455) 評論(0)  編輯  收藏 所屬分類: 架構之路

          主站蜘蛛池模板: 海门市| 白玉县| 盘锦市| 北辰区| 隆子县| 孝昌县| 申扎县| 库尔勒市| 托克托县| 宣城市| 卢氏县| 日照市| 磐安县| 建湖县| 大同县| 疏勒县| 慈利县| 铁力市| 陇南市| 抚州市| 波密县| 宜丰县| 始兴县| 平果县| 保定市| 怀远县| 绥江县| 孝义市| 介休市| 新沂市| 吉安市| 泸溪县| 邻水| 峨眉山市| 仁寿县| 县级市| 抚松县| 大连市| 寿阳县| 大足县| 宁安市|