換個角度做設計:基於schema的全域業務資料定義

來源:互聯網
上載者:User
換個角度做設計:基於schema的全域業務資料定義。

在傳統的大型項目中,一個業務建模後,在實施階段資料定義會重複的分解到下面幾個地方:

1. 資料庫

2. 資料層的Entity或者DTO

3. Service層的傳輸對象

4. 表現層的資料

5. 使用者錄入

6. 報表等其它應用。。。

上面每個層次都要定義自己的資料格式,驗證方法,這是多麼重複而又沒有意義的勞動。

而且受到每個環節定義能力的影響,資料的驗證和意義不一定能體現出原有的需求。

那麼,誰是終結者呢?schema!

schema是dtd的晚輩,但是更強大,靈活。我們知道,一般說來schema僅僅用於定義xml並且驗證xml。

但是schema也提供了擴充空間,就是annotation. 在annotation下面,可以定義

document,document是對schema的註解。另外一個掛在annotation下面的是appInfo,從名字看,

這是給應用程式提供資訊的空間。從schema定義看appInfo可以不受限制的存放各種xml資料。

這是我的一個例子:

 <xs:complexType name="customer">

  <xs:annotation>

   <xs:appinfo source="meta">

    <meta:appInfo xmlns:meta="http://steeven.org/meta">

     <meta:title>客戶</meta:title>

     <meta:tip>下訂單的客戶</meta:tip>

     <meta:help>產生交易的下單客戶</meta:help>

    </meta:appInfo>

   </xs:appinfo>

  </xs:annotation>

  .....

  ..... //這裡是type的定義

 </xs:complexType>

可以看到,在定義一個customer的時候,我們可以為其加上meta資訊,告訴程式,這個資料的名稱,tip,協助。

如果需要,甚至可以定義協助連結,輔助輸入的資料來源,輔助選擇的控制項名稱。

這些meta元資訊,無疑為調試,介面,UI,報表等情境提供了寶貴的資訊,使畫面自動產生成為可能。

那麼一個全域的schema定義有什麼好處呢?

1. 從上面的幾個情境看,利用schema產生上面幾個情境所需的代碼易如反掌。這些代碼帶有自描述,驗證。重要的是,層間傳輸的不再是毫無意義的數字和文本,它們是活的。

2. schema支援schema之間的引用,type的重定義或者擴充。重用或重組已有定義將十分容易,並且annotation可以被繼承。

3. schema是語言無關的,意味著什麼呢?schema定義可以用不同語言實現。

4. 配上規則引擎是業務層,配上基於schema的畫面產生就是使用者介面。配上xml資料庫,儲存問題也解決。

兩年前,我曾經做過一次半成功的嘗試。我先定義了全域業務資料schema, 然後產生了資料庫schema,

當然資料庫schema引用了業務schema, 因為業務schema是源頭。

接下來,因為是個b/s項目,我又定義了畫面的request schema和response schema。

有了這些schema剩下的任務就很簡單:根據資料庫schema, 產生了sql建庫指令碼。

根據request schema和response schema,前台人員製作了xsl,用於轉換xml成網頁。

response schema用於校正業務層的xml輸出。並且這兩個schema都產生了樣本資料,用於前台人員後後台人員獨立調試。

由於schema引用, 設計做的快速,語意準確,甚至很多描述直接寫進了schema的annotatiion。

但是也有不盡人意的地方,比如當時我們自己定義了schema到Bean的轉換規則,並且手寫了bean代碼。

並且開發人員學習xslt和理解schema也花了點時間。

現在的開發人員很幸福,各種基於schema的工具有很多選擇。

從長遠看,直接儲存xml,利用規則引擎,基於schema動態使用者畫面將是發展方向。代碼幾乎可以銷聲匿跡。

總結一下:

1.基於schema的全域資料定義即保證了資料定義在全域的一致。

2.提供了代碼產生的基準,產生式的代碼大大減少了開發和變更的成本。

3.基於schema的動態產生是最高理想。

參考資料:

schema spec

xmlbeans

.net schema文檔

jaxme

@TODO:

動態echo/swing/swt畫面產生。

schema appInfo寫作工具。

其它代碼轉換工具

posted on 2004-11-17 00:02 steeven 閱讀(83) 評論(0)  編輯 收藏

http://www.cnblogs.com/steeven/archive/2004/11/17/64605.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.