对代码生成器的一点想法
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
本文是《輕量級(jí) Java Web 框架架構(gòu)設(shè)計(jì)》的系列博文。
代碼生成器,這個(gè)東西很早就有人再搞了。比較典型的應(yīng)用場(chǎng)景就是中間件平臺(tái),國(guó)內(nèi)的像普元的 EOS?算是做的比較好的。通過(guò)圖形化界面的方式拖、拉、拽幾下,一個(gè)應(yīng)用軟件就生成了,因?yàn)槠脚_(tái)中已經(jīng)包括了大量的代碼生成器。當(dāng)然中間件平臺(tái)大多數(shù)都是一些商業(yè)產(chǎn)品,不是我們這些屌絲買(mǎi)得起的。一般都是金融企業(yè),像銀行、券商這類(lèi)公司才敢玩。
今天我不談這些商業(yè)產(chǎn)品,我要講的是關(guān)于代碼生成器的應(yīng)用,也就是說(shuō):為什么要用代碼生成器呢?
我想最有價(jià)值的地方就是減小了手工的重復(fù)勞動(dòng),計(jì)算機(jī)自動(dòng)幫我們生成代碼,將我們的雙手解脫出來(lái)。然而,這些代碼的格式是我們預(yù)先定義好的,也就是模板了,它們需要模板引擎來(lái)做解析。
在 Java 這個(gè)圈圈里面,做的比較好的模板引擎不多,Velocity 與 FreeMarker 算是比較好的兩款了。但本人還是比較鐘情與 Velocity,因?yàn)樗銐蜉p巧,足夠 Smart!而且還有 Apache 這個(gè)老大來(lái)保護(hù)它。當(dāng)然,遇到 Velocity 搞不定的情況,不妨再去找 FreeMarker 幫忙吧。
回到今天的主題,我想開(kāi)發(fā)一塊輕量級(jí)代碼生成器,使用場(chǎng)景如下:
以一張 product 表為例吧。
Excel 模板大致長(zhǎng)這個(gè)模樣:
生成的 SQL 腳本是這樣的:
DROP TABLE IF EXISTS `product`; CREATE TABLE `product` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`product_type_id` bigint(20) NOT NULL,`product_name` varchar(100) NOT NULL,`product_code` char(5) NOT NULL,`price` int(10) NOT NULL,`description` text,PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 生成的 Entity 類(lèi)如下: public class Product extends BaseEntity {private long productTypeId;private String productName;private String productCode;private int price;private String description;public long getProductTypeId() {return productTypeId;}public void setProductTypeId(long productTypeId) {this.productTypeId = productTypeId;}// ... 省略其他 getter/setter 方法 } 從數(shù)據(jù)庫(kù)腳本到實(shí)體類(lèi),其實(shí)有一個(gè)映射關(guān)系(ORM):若表名或列名出現(xiàn) Java 關(guān)鍵字或保留字,則使用一定的規(guī)則,將其轉(zhuǎn)換過(guò)來(lái),比如:可在變量名后面加上一個(gè)下劃線。
有朋友會(huì)問(wèn):為什么只生成 Entity 類(lèi),其他代碼難道不用生成嗎?
不錯(cuò),很多快速開(kāi)發(fā)框架確實(shí)將許多代碼都生成了,從后臺(tái)到前臺(tái)。對(duì)于我而言,需要做一些取舍,找準(zhǔn)這款工具的定位。它是為 Smart Framework 提供代碼生成的輔助工具,而不是一個(gè)強(qiáng)大的代碼生成軟件。我認(rèn)為,先一步步的來(lái)吧,至少表結(jié)構(gòu)和實(shí)體定義是比較浪費(fèi)時(shí)間的,我們先把這些代碼生成出來(lái)。以后看看還有哪些代碼需要生成,但是完全的代碼生成也有它的弊端,比如:當(dāng)反復(fù)生成代碼時(shí),不小心就會(huì)覆蓋掉自己已經(jīng)修改的代碼,那你就崩潰了。
此外,我們編寫(xiě)的這份 Excel 文件也可以作為系統(tǒng)的數(shù)據(jù)字典使用(看 PM 還敢不敢說(shuō)我們沒(méi)有文檔了),對(duì)于后期的維護(hù)工作也比較合適。
大家看看,有必要做這個(gè)小工具嗎?如果需要的話,我同樣也會(huì)把實(shí)現(xiàn)過(guò)程完全開(kāi)放出來(lái),與大家共同探討。
轉(zhuǎn)載于:https://my.oschina.net/huangyong/blog/160937
總結(jié)
以上是生活随笔為你收集整理的对代码生成器的一点想法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华为2013校园招聘上机笔试题
- 下一篇: 关于谷歌地图坐标与百度地图坐标的事