背景
企業需要“快速的”和“高質量的”交付應用,采用傳統的三層架構+數據驅動開發可以帶來快速交付,但是高質量視乎無從保證,這篇文章我談談我准備如何應對這種需求。
思路
CQRS + DDD + MDP(元數據驅動編程)
看圖解說
從讀和寫的角度思考一些問題。
-
- UI層的編碼量占據了整體的50%-80%(我自己的經驗)之間。
- UI層的主要目的是展示,即讀取。
- UI層團隊的開發人數比例不符合他們的編碼量(企業應該加大對UI層人才的投資和引進)。
- UI層團隊的編碼水平相對較差(我自己的經驗,我見過好的UI人員,月薪2W)。
- UI層在代碼級別相對容易抽象和重用(企業應用)。
- UI是用戶關注的重點。
- 寫操作是實現讀取的前提,(數據不寫進去,無從讀取)。
- 寫操作是驅動業務流程的核心所在(業務模型的核心)。
- 寫操作在代碼級別不容易重用,在概念級別更加容易重用。
鑒於上邊的9條現狀,我決定采用如下開發模式。
-
- 整體系統采用CQRS架構。
- 使用MDP開發Q(讀取),保證快速。
- 使用DDD開發C(寫端),保證高質量。
簡單的示例
效果圖
Grid.js
1 Ext.define('Demo.user.view.Grid', { 2 extend: 'Happy.grid.Panel', 3 alias: 'widget.user_grid', 4 requires: [ 5 'Demo.user.metadata.Manager', 6 'Demo.user.view.Form', 7 'Happy.grid.action.Refresh', 8 'Happy.grid.action.Edit' 9 ], 10 11 title: 'user grid', 12 13 initComponent: function () { 14 var me = this; 15 16 me.initTbar(); 17 18 me.callParent(arguments); 19 }, 20 21 initTbar: function () { 22 var me = this; 23 24 me.tbar = [ 25 Ext.create('Happy.grid.action.Refresh'), 26 Ext.create('Happy.grid.action.Edit', { 27 formContainer: function () { 28 return Ext.widget('window', { 29 title: 'user form', 30 items: { 31 xtype: 'user_form' 32 } 33 }); 34 } 35 }) 36 ]; 37 }, 38 39 getMetadataManager: function () { 40 var me = this; 41 42 return Demo.user.metadata.Manager; 43 } 44 });
Form.js
1 Ext.define('Demo.user.view.Form', { 2 extend: 'Happy.form.Panel', 3 alias: 'widget.user_form', 4 requires: [ 5 'Demo.user.metadata.Manager', 6 'Happy.form.action.Close', 7 'Happy.form.action.Save' 8 ], 9 10 width: 500, 11 12 initComponent: function () { 13 var me = this; 14 15 me.initButtons(); 16 17 me.callParent(arguments); 18 }, 19 20 initButtons: function () { 21 var me = this; 22 23 me.buttons = [ 24 Ext.create('Happy.form.action.Save'), 25 Ext.create('Happy.form.action.Close') 26 ]; 27 }, 28 29 getMetadataManager: function () { 30 var me = this; 31 32 return Demo.user.metadata.Manager; 33 } 34 });
備注
我相信企業應用中UI層的編程可以趨於聲明式,聲明式本身就是一種元編程模式。不過有一點是需要注意的,本文說的這些概念,不足以真正實現快速的和高質量的產品開發,因為實現這個目的還依賴很多相關因素,如:團隊、文化和組織。
相關文章:元數據驅動界面,支持三級配置(生成期、運行期和開發期)。