代碼生成?除了CRUD還能干啥?

有朋友曾經(jīng)問到一個問題,“代碼生成”在很多開源框架里面都有這個功能。就是根據(jù)表的定義,自動生成與程序設(shè)計(jì)相關(guān)的前后端代碼。
當(dāng)然,無容置疑,我們的RDS也是這樣的。只是除了CRUD我們還有什么?
我們的系統(tǒng)其實(shí)也是代碼的搬運(yùn)工,我們不能創(chuàng)造什么代碼,我們提供的是一種可以通過表單設(shè)置,就可以讓我們的設(shè)計(jì)保持足夠的靈活性的方法。
除了增加、修改、刪除、查看詳情外,我們的系統(tǒng)提供了經(jīng)常會使用的,導(dǎo)入,導(dǎo)出,打印,修改字段,跳轉(zhuǎn),彈窗,無關(guān)聯(lián)操作等方法。這些方法沒有什么神奇的地方,甚至可以說是有些簡陋。那么,他們是如何提高我們的開發(fā)效率的呢?
首先,開發(fā)就是一個配置的過程,我們在定義一個按鈕操作的時候,我們需要:
定義后端針對這個按鈕需要調(diào)用的方法,并將方法依賴的控制器、服務(wù)、模型等一一創(chuàng)建好。
針對這個方法需要進(jìn)行接口授權(quán),或者后端菜單和方法的授權(quán)
針對這個方法在前端需要創(chuàng)建jsapi,以便確定如何調(diào)用這個接口
針對這個訪問我們需要在前端為之創(chuàng)建一個按鈕,并根據(jù)權(quán)限確定其顯示還是隱藏
OK,到此為止,主要的事情我們都落實(shí)好了,那么其具體功能才能被進(jìn)一步的考慮到。那么在此之前的這些操作,其實(shí)都是有規(guī)律可循的,完全可以不用程序員去自己定義或者修改。
那么如果,我們將上述的四步都交由程序完成,那么我們只需考慮的就是這個按鈕背后需要實(shí)現(xiàn)的業(yè)務(wù)邏輯是什么就可以了。
而RDS其實(shí)要做,而且正在做的就是這個工作,我們將程序化的操作,總結(jié)匯總起來,找到其中的規(guī)律,讓我們的代碼生成器來做好四個方面的工作,將業(yè)務(wù)的實(shí)現(xiàn)留給程序員。當(dāng)然我們有些方法甚至是把業(yè)務(wù)也給簡單的實(shí)現(xiàn)了,而且完全可堪一用。
比如我們抽象出來一種方法“無關(guān)聯(lián)按鈕”,什么是無關(guān)聯(lián)按鈕?
我們修改一個行的數(shù)據(jù),必須選中一行,這個按鈕就與一行有關(guān)聯(lián)
我們刪除幾個行的數(shù)據(jù),必須選中多行,這個按鈕就與多行有關(guān)聯(lián)
那么無關(guān)聯(lián)按鈕,就與行無關(guān)。
比如,如下圖所示,我們?yōu)闀T模塊生成測試數(shù)據(jù)的按鈕,他就是一個無關(guān)聯(lián)按鈕

這種按鈕給我們提供了足夠的靈活性,首先是按鈕要完成什么功能,我們并沒有提供,只是提供了后端控制器中的一個方法。剩余的其他四項(xiàng),我們都幫您做完了。
1. 控制器及其方法,無非就是方法里面是空的
2. 提供了為此按鈕進(jìn)行授權(quán)的管理界面

3. 為調(diào)用這個接口提供了相應(yīng)的jsapi
4. 創(chuàng)建前端按鈕,并根據(jù)權(quán)限確定是否顯示
當(dāng)系統(tǒng)為我們完成了這些代碼后,系統(tǒng)已經(jīng)可以正常運(yùn)行起來了,只是,我們還沒有為此無關(guān)聯(lián)按鈕,實(shí)現(xiàn)其特定的業(yè)務(wù)邏輯而已。
下面展示的就是我們實(shí)現(xiàn)完成的后的無關(guān)聯(lián)按鈕后端方法的源碼
特別說明:為保證我們自己定義的業(yè)務(wù)邏輯不會被再次生成的代碼覆蓋,我們需要做兩件事情:
1. 生成前后端代碼后,將無關(guān)聯(lián)操作對應(yīng)的后端方法用/**start/ .... /*end*/包括起來
2. 將此方法修改為后端不再生成

通過上面的案例說明,我們想向您傳遞的是一種編程理念,我們應(yīng)該把能夠由機(jī)器實(shí)現(xiàn)的,進(jìn)來交給計(jì)算機(jī)自動完成,程序員需要做的是計(jì)算機(jī)很難自動完成的部分。只要充分利用這些功能,我們就可以大幅度的降低開發(fā)的時間,提高效率,降低出錯的機(jī)率。
我相信能夠?yàn)橛脩籼峁椭能浖?,一定是有價值的!
本文案例參考:RDS通用后臺管理系統(tǒng)功能預(yù)覽(demo.rdscode.cn)