掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
模板,一個我們天天使用的技術(shù), 比如:

模板帶給我們的好處很明顯:約束+重用。通過模板我們可以把變與不變分離,重用不變,變可以交給子類/通過回調(diào)機制完成,而且還具有約束作用,防止亂寫代碼。
那我們應該利用好這個技術(shù),加速項目的開發(fā)速度。接下來我們看看如何利用模板技術(shù)來加速我們的開發(fā)速度。
接下來,我將介紹下如何利用模板技術(shù)加速開發(fā)速度,但不會接受如何利用模板技術(shù)開發(fā)可復用的代碼;本文以IntelliJ IDEA為原型介紹:
如我們要求 i + j,可以先:
- int k = add(i, j);
然后按Alt+enter自動生成相關代碼;而不是自己去敲;其會自動生成相應的變量和方法體;如圖
1、按Alt+Enter彈出如創(chuàng)建方法/創(chuàng)建本地變量的提示
2、可以根據(jù)生成的模板方法,修改模板參數(shù);
3、還有典型的如生成構(gòu)造器、getter/setter等,按Alt+Insert得到如下圖:
比如在生成構(gòu)造器時,可以選擇相關字段,會自動生成相應的賦值操作:
4、Ctrl+O/Alt+Insert生成覆蓋方法;ctrl+I/Alt+Insert生成實現(xiàn)方法的
5、選中代碼后,Ctrl+Alt+T彈出Surround with,生成包圍代碼的的代碼,如if/else:
#p#
6、在如JSP標簽頁面中,按Ctrl+Alt+J,生成環(huán)繞的標簽:
等等。。具體可以參考jetbrains.官網(wǎng)的《Generating Code》部分。
如果用過idea,肯定用過如輸入 psvm 然后按Tab鍵,會自動生成public static void main方法,使我們少輸入很多字符。這個功能在idea中叫做Live Template;接下來讓我們看看有哪些Live Template和如何自定義Live Template。
最常見的功能:
3、ifn 會自動生成如下圖
大家可以通過 File--->Settings---->Live Templates找到所有模板,如:
如 lazy 生成延遲初始化的代碼,inn生成if (** != null)
如fori --->for (int j = 0; j < ; j++) {}
List list; itli ----> for (int i = 0; i < list.size(); i++) { Object o = list.get(i);}
等等,這個可以去Settings里查看。
接下來我們看看如何自定義自己的Live Template:
#p#
接下來在Java文件中,輸入test會生成 hello world;
此處看到 $END$ 這種變量,接下來解釋下:
如
此處選中“int i = 1;”,然后按Ctrl+Alt+T 彈出“Surround With” 然后輸入test前綴,自動生成:--->hello int i = 1; world
還有如 輸入 if for等前綴 按Ctrl+Shift+Enter會自動生成 帶()和{} 的形式,非常方便。
如果想定義自己的變量,可以直接點擊在編寫模板時,模板文本右邊的:“Edit variables” 編寫:如得到返回的變量,方法名,類名等等。
大家可以參考官網(wǎng)的《Live Templates》。
3、File and code Templates
到此我們使用的都是代碼塊級別的模板,在工作中我們常見的還需要:
因為IDEA使用的是velocity模板,所以語法相對來說是比較靈活的,而Eclipse看了下是自創(chuàng)的,所以在創(chuàng)建時沒有IDEA靈活。
File---->Settings--->File and Code Templates 打開模板設置頁面
1、創(chuàng)建Include文件
此文件包含了我的copyright
#p#
2、添加到類模板中
接著新建一個Java Class,在頁面的頂部會出現(xiàn)這個copyright;
以KeyValueService.java為例。
3、新增Class
3.1、在包處Alt+Enter彈出新建列表,選擇Java Class
3.2、 接著在彈出的界面中輸入 Service的前綴,并選擇Service類型:
4、接著類就創(chuàng)建好了:
- /**
- * Copyright (c) 2005-2012 https://github.com/zhangkaitao
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- */
- package com.sishuok.es.maintain.keyvalue.service;
- import com.sishuok.es.common.inject.annotation.BaseComponent;
- import com.sishuok.es.common.service.BaseService;
- import com.sishuok.es.maintain.keyvalue.entity.HelloValue;
- import com.sishuok.es.maintain.keyvalue.repository.HelloRepository;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- /**
- *
User: Zhang Kaitao
- *
Date: 13-6-20 下午4:31
- *
Version: 1.0
- */
- @Service
- public class HelloService extends BaseService
{ - @Autowired
- @BaseComponent
- private HelloRepository helloRepository;
- }
非常方便。
除此之外,我們還可以定義如 jsp模板、html模板、配置文件模板等等,消除開發(fā)中的重復工作。
但是此種方式的主要缺點就是:一次只能一個文件。比如,我們生成Service時,其實DAO、Contoller等***也自動生成。 接下來就需要自動代碼生成了。
估計很多朋友都使用/開發(fā)過代碼生成器;其實開發(fā)一個簡單的代碼生成器花不了多長時間,核心指導思想是:變與不變分離:
所以根據(jù)這個思想可以很容易寫一個代碼生成器,可以按照如下步驟完成:
目前見到的主要有這些類型的自動代碼生成。
代碼生成的模板文件可以使用純文本(即純粹的字符串替換),更高級點的可以使用如velocity這種模板語言,更加強大。
如果有朋友不會寫代碼生成器,可以先建一個Example的示例代碼,接著做復制、粘帖、修改實體名等等完成,估計30秒鐘也能出一個基本的模塊代碼。但是如果交給代碼生成器,速度更快。
比如筆者剛開發(fā)的新項目,還沒時間開發(fā)代碼生成器,就寫一個一些示例,這樣如果寫新模塊就直接復制一份改改即可,尤其樹這塊節(jié)省不少時間,點擊showcase前往查看。
代碼生成器也不是***的,如果你做過互聯(lián)網(wǎng)項目,不像企業(yè)應用那樣有許多的增刪改查,所以這個時候,純粹生成CRUD的代碼生成器沒有任何意義。
到此我們介紹完了模板,使用模板能提升不少開發(fā)速度,但是模板不是***的,只有發(fā)現(xiàn)有些代碼是由:變與不變組成,那我們就可以把不變的做成模板,變的部分通過占位符(即變量)填入。
原文鏈接:http://jinnianshilongnian.iteye.com/blog/1895481

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流