低代碼,沒(méi)有想象的那么容易,一個(gè)過(guò)來(lái)人的吐槽(低代碼的概念)
我一個(gè)小鎮(zhèn)青年,大學(xué)學(xué)的電子信息專業(yè),畢業(yè)幾年過(guò)后,就一直開(kāi)始承接外包項(xiàng)目,才開(kāi)始還行,團(tuán)隊(duì)小,業(yè)務(wù)不復(fù)雜,小日子過(guò)得還算不錯(cuò),這種樣子持續(xù)好幾年,中途兜兜轉(zhuǎn)轉(zhuǎn),團(tuán)隊(duì)也沒(méi)有做大做強(qiáng)。有天突然幡然醒悟,找到了原因,就是團(tuán)隊(duì)一旦規(guī)模大了,研發(fā)質(zhì)量不可控,研發(fā)管理難度太大,很難保證多快好省完成項(xiàng)目交付,我相信這是很多小的開(kāi)發(fā)團(tuán)隊(duì)的通病。
找尋了很久之后,發(fā)現(xiàn)自己要構(gòu)建低門(mén)檻開(kāi)發(fā)框架(現(xiàn)在所謂很火的低代碼開(kāi)發(fā)工具),是解決這個(gè)問(wèn)題的核心關(guān)鍵,然后找了一個(gè)志同道合的投資人,開(kāi)始了跌跌撞撞的研發(fā)工作,一邊保持日常的項(xiàng)目外包,一邊開(kāi)啟燒腦的做低代碼,我們的產(chǎn)品名稱為JVS,通過(guò)幾年的推進(jìn),現(xiàn)在產(chǎn)品也算是成型了,兩次推到完全重來(lái)的經(jīng)歷回想起來(lái)絕對(duì)是漫長(zhǎng)的恐怖片。
一開(kāi)始我們最簡(jiǎn)單的想法是,低代碼開(kāi)發(fā)就是像Delphi、VB那樣拖控件,然后功能就實(shí)現(xiàn)了,但這種就有個(gè)問(wèn)題,那就是業(yè)務(wù)邏輯復(fù)雜化后,很難通過(guò)拖拽的組件實(shí)現(xiàn)復(fù)雜的業(yè)務(wù),這樣導(dǎo)致整個(gè)平臺(tái)的靈活性受到限制,特別是開(kāi)發(fā)很多業(yè)務(wù)需求復(fù)雜的定制的軟件功能時(shí),基本上這個(gè)東西對(duì)關(guān)鍵的問(wèn)題解決使不上勁了。
后面為了要滿足很多定制化的需求,結(jié)合市面上看到的已經(jīng)有成型的代碼生成的框架,又開(kāi)始推進(jìn),借著mybatis這種就可以在數(shù)據(jù)庫(kù)更抽象一層來(lái)獲取元數(shù)據(jù),由系統(tǒng)自動(dòng)生成一些通用的crud的代碼,這樣可以縮減程序員的機(jī)械性重復(fù)性的勞動(dòng),程序員補(bǔ)充相關(guān)的邏輯代碼。這個(gè)過(guò)程一直持續(xù)了好久,在生產(chǎn)項(xiàng)目上也是使用這種方式,但真正執(zhí)行下來(lái),分析出來(lái)的結(jié)果,并沒(méi)有省掉多少開(kāi)發(fā)工作量。又開(kāi)始絞盡腦汁找原因。
我們發(fā)現(xiàn),在很多外包項(xiàng)目過(guò)程中,甲方的領(lǐng)導(dǎo)高瞻遠(yuǎn)矚,但是他們內(nèi)部缺乏IT建設(shè)的專業(yè)性人才,往往在落地設(shè)計(jì)業(yè)務(wù)需求的過(guò)程中,缺失承上啟下的過(guò)渡,那么這個(gè)過(guò)程中,就非??简?yàn)我們的產(chǎn)品經(jīng)理,產(chǎn)品經(jīng)理理解能力、溝通能力強(qiáng),且干事情積極主動(dòng)的項(xiàng)目 ok,一旦缺失任何一個(gè)方面的執(zhí)行力,項(xiàng)目鐵定會(huì)出問(wèn)題。當(dāng)時(shí)就要 尋求一條新的路,去優(yōu)化這個(gè)問(wèn)題。
我們找到一個(gè)關(guān)鍵點(diǎn),傳統(tǒng)的產(chǎn)品經(jīng)理或者需求經(jīng)理 設(shè)計(jì)原型 需要給客戶看設(shè)計(jì)圖或者axure,很多客戶看不懂,很難意識(shí)到交付的預(yù)期效果,那么是否能把產(chǎn)品經(jīng)理設(shè)計(jì)原型這個(gè)步驟改進(jìn)為直接配置可見(jiàn)的業(yè)務(wù)系統(tǒng),并伴有簡(jiǎn)單的業(yè)務(wù)操作邏輯,客戶直接上手操作,這樣大大縮短前端還原,客戶需求確認(rèn)的過(guò)程,客戶看到的實(shí)際系統(tǒng)更加具象化,需求確認(rèn)之后的變更大大縮減,從而減少了大量的研發(fā)浪費(fèi)。 當(dāng)然這個(gè)前提要求是產(chǎn)品經(jīng)理配置的工作量不能太大,門(mén)檻不能太高。
當(dāng)時(shí)參考多種技術(shù)與產(chǎn)品,像Sap不光是做到這種元數(shù)據(jù)的動(dòng)態(tài)加載,還做到了像程序的在線編譯,不需要通過(guò)傳統(tǒng)的編譯發(fā)布,這點(diǎn)像在java的groovy語(yǔ)言一樣,可以動(dòng)態(tài)編譯運(yùn)行。同時(shí),也思考權(quán)限控制,需要比傳統(tǒng)的信息管理系統(tǒng)更加靈活,可能需要控制到數(shù)據(jù)行的權(quán)限,權(quán)限的方式也更多。這樣有了權(quán)限 元數(shù)據(jù)管理 動(dòng)態(tài)語(yǔ)言,基本上就可以搭起來(lái)了。后面需要加入像OA這種動(dòng)態(tài)表單設(shè)計(jì),實(shí)現(xiàn)和數(shù)據(jù)庫(kù)互通,解決傳統(tǒng)OA只是文檔的問(wèn)題,把表單提交的數(shù)據(jù)放入數(shù)據(jù)庫(kù)中,配搭對(duì)應(yīng)的邏輯執(zhí)行,讓配置的功能真正能跑起來(lái)。
再后面就是整個(gè)系統(tǒng)的多租戶設(shè)計(jì),還有像復(fù)雜查詢條件,多種界面控件,內(nèi)置報(bào)表集成,API和界面的動(dòng)態(tài)生成,有的是加入了代碼生成器,對(duì)于復(fù)雜應(yīng)用可以生成代碼,再用程序來(lái)調(diào)式應(yīng)用。
這樣設(shè)計(jì)出來(lái)的整個(gè)系統(tǒng)需要很多引擎,與數(shù)據(jù)庫(kù)交互的動(dòng)態(tài)數(shù)據(jù)引擎,實(shí)現(xiàn)表單功能的設(shè)計(jì)引擎,實(shí)現(xiàn)列表頁(yè)配置的列表配置引擎,實(shí)現(xiàn)報(bào)表功能的引擎,實(shí)現(xiàn)動(dòng)態(tài)功能的邏輯引擎,實(shí)現(xiàn)人工業(yè)務(wù)流轉(zhuǎn)的流程引擎,實(shí)現(xiàn)權(quán)限管理靈活性的方案,實(shí)現(xiàn)數(shù)據(jù)管理的功能的方案,實(shí)現(xiàn)API開(kāi)發(fā)的動(dòng)態(tài)化,實(shí)現(xiàn)界面動(dòng)態(tài)設(shè)計(jì)的引擎。這些你想全部都集成完美,實(shí)際上是一個(gè)很大工作量,如同開(kāi)發(fā)一個(gè)高端動(dòng)態(tài)化的ERP引擎一樣,這樣實(shí)現(xiàn)后,一個(gè)明顯的缺點(diǎn)就是整個(gè)程序很重,如在加載時(shí)需要加載很多庫(kù),也需要專業(yè)的經(jīng)驗(yàn)去操作。
當(dāng)然優(yōu)點(diǎn)也是很明顯,就是開(kāi)發(fā)速度快,數(shù)據(jù)私有化安全可控,對(duì)人員的依賴度遠(yuǎn)遠(yuǎn)低于傳統(tǒng)開(kāi)發(fā),而且是基于柔性的交付,靈活性相對(duì)于傳統(tǒng)系統(tǒng)要高,基本上屬性配置、熟悉需求的人員,一般普通的管理系統(tǒng)1-2周的時(shí)間就可以配置完成,大大縮短了開(kāi)發(fā)的成本。
但難點(diǎn)就是前期客戶不解這些,客戶的技術(shù)水平一般也不高,需要培訓(xùn)才能使用,或者最好有以前的程序員經(jīng)驗(yàn)才能使用,這樣就限制住了客戶,相當(dāng)于一個(gè)半成品的中間件一樣,不像傳統(tǒng)的產(chǎn)品是一個(gè)很簡(jiǎn)單的使用,這樣軟件的使用需要有一定的技術(shù)水平。
大廠做這些有優(yōu)勢(shì),也有缺點(diǎn),缺點(diǎn)就是大廠的人工成本很高,對(duì)于客戶的定制化修改功能成本很高或者基本上就不響應(yīng),優(yōu)點(diǎn)就是可以充分利用現(xiàn)有的資源,快速打磨產(chǎn)品。所以這個(gè)也是決定我們的產(chǎn)品與大廠產(chǎn)品的不同之處。
我在市場(chǎng)上看到有的廠家使用PHP來(lái)做這樣的系統(tǒng),其實(shí)PHP真的不適合做這種高度復(fù)雜,N多功能雜化的軟件,后面維護(hù)起來(lái),像面條一樣,一拉動(dòng)全碗,真的會(huì)導(dǎo)致后期復(fù)雜度指數(shù)增長(zhǎng)。軟件開(kāi)發(fā)造型時(shí)語(yǔ)言最好是選擇java或c#這種面向?qū)ο蟮恼Z(yǔ)言,使用分層框架設(shè)計(jì),做好整個(gè)軟件的框架,這樣后面可能需要改動(dòng)的比較小,也比較適合多個(gè)團(tuán)隊(duì)分開(kāi)功能開(kāi)發(fā)。
最后發(fā)現(xiàn),我們很多功能與簡(jiǎn)道云、宜搭的產(chǎn)品在思路實(shí)現(xiàn)層面比較相似,或者是殊途同歸吧,但區(qū)別在于我們側(cè)重于私有化、定制化、構(gòu)建技術(shù)開(kāi)放的輔助研發(fā)工具,而非是靠生態(tài)的聚合平臺(tái),畢竟體量、資源不同,所以商業(yè)模式與出路也不同。