公司ERP系統(tǒng)重構(gòu)那些事
記一次會(huì)議,我提出插件化的想法,有支持也有反對(duì),其中“系統(tǒng)架構(gòu)師”表示插件化后的項(xiàng)目沒什么意義,今天來(lái)討論項(xiàng)目是否需要插件化的一些觀點(diǎn)。
項(xiàng)目背景
公司內(nèi)部“ERP”系統(tǒng),其職責(zé)以遠(yuǎn)遠(yuǎn)超出ERP,更像公司內(nèi)部信息管理系統(tǒng),以下簡(jiǎn)稱公司ERP或公司ERP系統(tǒng)。公司ERP系統(tǒng)是C/S架構(gòu),除了用戶控件之外系統(tǒng)內(nèi)部實(shí)現(xiàn)沒有分層,以文件夾的形式維護(hù)著一個(gè)個(gè)業(yè)務(wù)模塊的功能。
這個(gè)系統(tǒng)除了包含了ERP系統(tǒng)的基本功能外,還需要維護(hù)公司內(nèi)部電商網(wǎng)站的數(shù)據(jù)(網(wǎng)站后臺(tái)的一些功能被搬到C/S上),客服管理等等的功能。
值得一提的是,公司ERP系統(tǒng)為了安全考慮將數(shù)據(jù)訪問(wèn)以Web Services向外部公開,Web Services內(nèi)部實(shí)現(xiàn)安全認(rèn)證(IP認(rèn)證、MAC認(rèn)證等),這樣做的優(yōu)缺點(diǎn)或者說(shuō)有用沒用我們先不考慮,只是讓大家了解下有這么一出事情。
由于項(xiàng)目日漸龐大,維護(hù)成本極高,編譯時(shí)間>3分鐘(不能確保一定能編譯過(guò)),導(dǎo)致了開發(fā)和測(cè)試過(guò)程中嚴(yán)重的時(shí)間消耗,公司決定重構(gòu)該項(xiàng)目。
一提插件化想法
大約在2個(gè)月前,我首次提出了插件化的想法,“系統(tǒng)架構(gòu)師”以我們的項(xiàng)目沒必要弄的這么復(fù)雜拋棄了插件化開發(fā)模式,當(dāng)時(shí)手上沒有完善的Demo和文檔再加上本人的口才也不是很好,就暫時(shí)的沒有卷入與其討論。
二提插件化想法
距離上一次提插件化已過(guò)去了一個(gè)多月,這段時(shí)間,我努力完善Koala Framework,以盡早的展現(xiàn)出完善的插件機(jī)制一次,這一次我做足了工作,畫了當(dāng)前情況的 開發(fā) - 測(cè)試 - 發(fā)布流程圖和插件化之后的 開發(fā) - 測(cè)試 - 發(fā)布的流程圖,寫了一份“插件式開發(fā)模式討論會(huì)”的PPT,花了一個(gè)下午的時(shí)間寫了一個(gè)ERP Demo。Demo的截圖可以看:Koala Framework是什么?我為什么要寫這個(gè)框架?中的Koala Framework Demo一節(jié)。
現(xiàn)狀發(fā)布流程圖
紅色為最耗時(shí)部分,黃色為插件化后可以省去的部分。
插件化后的發(fā)布流程圖
從圖中可以看出,插件化之后與其測(cè)試、客戶端交互的是插件服務(wù)器(實(shí)質(zhì)為DLL文件),而不需再去依賴代碼,也就是說(shuō)只有在開發(fā)階段才會(huì)依賴代碼,依賴編譯工具,其他階段用來(lái)交互的只是DLL文件,測(cè)試無(wú)需再去關(guān)心,編譯環(huán)境,編譯配置,他們所需要做的只是更新來(lái)自開發(fā)人員的插件,用來(lái)進(jìn)行功能測(cè)試,有問(wèn)題通知開發(fā)人員這一過(guò)程,個(gè)人認(rèn)為大大的降低了交流的次數(shù)。
提議未果
插件化后的項(xiàng)目結(jié)截圖:
在這一次交流過(guò)程中發(fā)現(xiàn)自己已不想再去爭(zhēng)論插件化與平常開發(fā)的一些優(yōu)劣了,或許是對(duì)現(xiàn)在的“系統(tǒng)架構(gòu)師”不再抱有什么可以溝通的期望,也不想再與他爭(zhēng)論些什么了吧,這一次現(xiàn)在的“系統(tǒng)架構(gòu)師”還是覺得插件化沒有必要,當(dāng)實(shí)現(xiàn)有變更的時(shí)候把變更的實(shí)現(xiàn)類Copy - Paste - 編譯一下發(fā)布就好了。想 起以往討論的種種實(shí)在覺得悲催,一個(gè)要跟他去解釋在系統(tǒng)構(gòu)建中實(shí)體優(yōu)于DataSet、DataTable,同類型不同實(shí)例的對(duì)象的 GetHashCode()方法返回的值是不一致、服務(wù)端到客戶端經(jīng)過(guò)WCF之后實(shí)例是不一致的(省略N件事情)“系統(tǒng)架構(gòu)師”實(shí)在是沒有在溝通下去的必 要。
心里的那桿秤
是否所有的項(xiàng)目都合適去插件化?
這邊不繞彎子,給出個(gè)人的一些想法:如果一個(gè)項(xiàng)目需要長(zhǎng)期的維護(hù)那么這個(gè)項(xiàng)目就應(yīng)該被插件化。
上面主要講述了一些插件化的優(yōu)勢(shì),物極必反,任何東西都有好的一面和壞的一面,插件化也不是完美的他也有不好的那一面,如果項(xiàng)目比較小,可能做完以后就不再需要維護(hù)那么就完全不需要插件化。
支持插件化不代表全部插件化
舉個(gè)例子(可能不太恰當(dāng)?shù)熨Y聰慧的你們肯定可以理解,哈哈)
支持插件化:Windows操作系統(tǒng),你可以選擇是否去安裝軟件,它本身支持軟件(插件)安裝。
全部插件化:系統(tǒng)自帶的計(jì)算器算是Windows操作系統(tǒng)里面的一個(gè)軟件(插件),但里面的+、-、*、/等算法不一定是插件化方式實(shí)現(xiàn)的。
提到的那些文檔
文件:插件式開發(fā)模式討論會(huì)、發(fā)布流程圖
https://skydrive.live.com/redir?resid=4536D446A0E85208!2338&authkey=!AL-Eafwz09-bZMs
PS.這兩個(gè)鏈接鏈向的是同一個(gè)地址,第二個(gè)為簡(jiǎn)短的Url,在實(shí)際使用過(guò)程中可能會(huì)被墻。