文檔驅(qū)動(dòng)式代碼設(shè)計(jì)器——代碼是設(shè)計(jì)出來(lái)的!

2016-10-22 10:07 by 金色海洋(jyk)陽(yáng)光男孩, 497 閱讀, 3 評(píng)論, 收藏編輯

 

代碼是敲出來(lái)的嗎?是批量生成出來(lái)的嗎?

 

No no no,代碼是設(shè)計(jì)出來(lái)的!

 

如果說(shuō)到代碼生成器,大家可能會(huì)想到三層、動(dòng)軟代碼生成器、數(shù)據(jù)庫(kù)表等等。其一般的思路是,先有數(shù)據(jù)庫(kù)然后根據(jù)庫(kù)里的表自動(dòng)生成一系列的代碼,包括實(shí)體類、持久化、業(yè)務(wù)層(空函數(shù))、頁(yè)面代碼等,還可以生成數(shù)據(jù)庫(kù)文檔。這個(gè)確實(shí)很好很強(qiáng)大,可以免除程序員的機(jī)械式的敲代碼的工作。

 

(“主要實(shí)現(xiàn)在對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的基類代碼的自動(dòng)生成,包括生成屬性、添加、修改、刪除、查詢、存在性、Model類構(gòu)造等基礎(chǔ)代碼片斷,支持不同3種架構(gòu)代碼生成,使程序員可以節(jié)省大量機(jī)械錄入的時(shí)間和重復(fù)勞動(dòng),而將精力集中于核心業(yè)務(wù)邏輯的開(kāi)發(fā)?!?

——摘自動(dòng)軟官網(wǎng)的介紹  )

 

但是我們都知道,表的設(shè)計(jì)是根據(jù)客戶的需求、業(yè)務(wù)邏輯、設(shè)計(jì)人員的項(xiàng)目經(jīng)驗(yàn)設(shè)計(jì)的,其中最主要的是要受到關(guān)系型數(shù)據(jù)庫(kù)自身的特點(diǎn)(所以nosql嘛)。表并不能完整體現(xiàn)業(yè)務(wù)需求,否則教會(huì)客戶使用企業(yè)管理器(數(shù)據(jù)庫(kù)的客戶端軟件)就可以了。直接把表交給客戶用,那是不行的,否則程序員就集體失業(yè)了。

 

總結(jié)一下,一般代碼生成器的思路是:數(shù)據(jù)庫(kù)表——代碼——文檔。

 

而我這里說(shuō)的思路是完全相反的:文檔——代碼——數(shù)據(jù)庫(kù)——業(yè)務(wù)邏輯

 

一般我們做項(xiàng)目的順序是:調(diào)研,設(shè)計(jì),編碼,測(cè)試,上線。其中設(shè)計(jì)階段要編寫(xiě)大量的文檔,比如功能說(shuō)明,各種流程圖,領(lǐng)域設(shè)計(jì),數(shù)據(jù)庫(kù)設(shè)計(jì),原型圖等等。還要編制任務(wù)計(jì)劃,團(tuán)隊(duì)分工合作。然后開(kāi)始編碼。編碼的時(shí)候會(huì)發(fā)現(xiàn),上一階段的各種文檔只能看,對(duì)于要編寫(xiě)的代碼完全沒(méi)有直接作用,必須要程序員進(jìn)行“翻譯”。把文檔翻譯成代碼——于是乎苦逼的碼農(nóng)誕生了!

 

而實(shí)際情況是,項(xiàng)目緊任務(wù)重時(shí)間還短。怎么辦呢?文檔可以沒(méi)有或者后補(bǔ),但是代碼是不能沒(méi)有的,所以往往文檔就被忽略甚至完全被干掉了——這是文檔和代碼的矛盾點(diǎn)。

 

怎么辦呢?犧牲文檔?下面要介紹一把雙刃劍:可以讓文檔成為代碼的助力!可以把碼農(nóng)從簡(jiǎn)單、機(jī)械、重復(fù)中解脫出來(lái),但是同時(shí)也意味著不會(huì)再有“碼農(nóng)”這個(gè)崗位!

 

還要從剛進(jìn)入的這家公司說(shuō)起。公司主營(yíng)各種企業(yè)管理的項(xiàng)目,采用ABP架構(gòu)最為底層,然后又進(jìn)一步封裝。

   簡(jiǎn)單的說(shuō),用EF的code frist做實(shí)體類,然后生成數(shù)據(jù)庫(kù),再根據(jù)業(yè)務(wù)需求設(shè)計(jì)Dto,有很多很多的Dto。頁(yè)面用angularjs做總控和表單,kendoui做列表。存儲(chǔ)部分至少定義一個(gè)接口,webapi部分也要定義一個(gè)接口??傊嫦蚪涌诰幊搪?。還有很多很多,逐步了解中。

 

對(duì)于新人來(lái)說(shuō),最大的問(wèn)題就是——這都哪跟哪呀。有了code frist,也就沒(méi)有了數(shù)據(jù)庫(kù)文檔。有一大堆dto,但是這些dto都是啥功能?點(diǎn)開(kāi)挨個(gè)看吧。

 

看了兩周還是蒙登。如果有一系列的文檔說(shuō)明該多好?但是大家都知道,任務(wù)緊工期短,哪有時(shí)間弄文檔?

   好了又繞回來(lái)了,如果我們?cè)O(shè)計(jì)的文檔可以自動(dòng)生成代碼,是不是一切就都迎刃而解了呢? <

網(wǎng)友評(píng)論