如今假設基於產品原型開發功能接口,先後端分離。數據庫
那麼基於這個功能需求,設計出來總共 t 張表,每張表字段數量記爲f(t)。
總共p個頁面,每個頁面的Tab數量 記爲 Ta(p),模塊數量爲 M(p),模塊中最大的類型數量爲 Max(type(p)),每種類型最大的子類型數量爲 Max(subType(p)) 。
接口數量總共爲m,參數個數Pa(m),每個接口字段數量,Pr(m)。後端
由於數學不太好,不會表示。上述大體上是表示複雜程度。實際的量,能夠是總和,也能夠是乘積。前後端分離
那麼最終的表達式爲:
設計
接口裏面還省略了接口的子接口,業務邏輯的方法調用,還忽略了對系統自己的變更,以及關聯的已經存在的數據表的關聯程度,例如用戶表,權限表等。blog
常常由於表少,字段少而低估了工做量。實際開發估計工做量,應該充分考慮 模塊,頁面,接口,字段等等方面的數量。
至於爲何用乘積,乘積更能反映複雜程度,由於每個因子,由於數量增長1,其他模塊都跟着相應的增長,而不是簡單的工做量加一。
若是把程序想象成數據的流動,每個接口,都要針對共同的參數進行處理。從Controller 流入 Service,從Service流入Repository,也就是數據庫。
每個數據庫的 statement 都是對應所須要的字段,進行CRUD,全都是關聯起來的,接口數量,字段數量,表數量,都會直接致使DAO的複雜程度。接口
例子:
最近作的一個項目,有三個模塊,兩個主頁面,三個次要頁面,每個頁面3個Tab。最大的一級類型3,最大的二級類型3。
兩張表,分別是 11個字段,20個字段。
核心接口個數:9x6個,9個interface,平均每個接口6個method。
核心接口參數平均2個。接口參數字段平均5個。開發
那麼最終的結果就是:原型
(11+20)x (2 x 3 x 3 x 3 x 3 + 3 x 1 x 1 x 1 x 1)x ( 9 x 6 x 2 x 5) = 2762100。數學
276萬多。產品
實際項目到完成的時候,代碼行數達到了14000 行。