基于領域驅動的Java開發工具包Common項目分享
項目地址:https://github.com/xuliugen/common 喜歡的請加星。
先上圖:
本項目主要包含:constant、domain、exception、util這四個主要部分。
Constant
主要包含了一些項目中的常用常量。
示例:
(1)標點符號常量類
public interface ConstPunctuation { /** * : 冒號 */ String COLON = ":"; /** * - 中劃線 */ String MINUS = "-"; /** * -- 雙中劃線 */ String TWO_MINUS = "--"; /** * _ 下劃線 */ String UNDERLINE = "_"; String SLASH = "/"; /** * , 逗號 */ String COMMA = ","; }
(2)日期時間格式常量
/** * yyyy-MM-dd HH:mm:ss */ String yyyy_MM_ddHHmmss = "yyyy-MM-dd HH:mm:ss"; /** * MM/dd/yy */ String MMddyy1 = "MM/dd/yy"; /** * yyyy-MM-dd */ String yyyy_MM_dd = "yyyy-MM-dd"; /** * MMddyy */ String MMddyy = "MMddyy"; /** * yyMMdd */ String yyMMdd = "yyMMdd"; /** * yyyy-MM-dd-HH */ String yyyy_MM_dd_HH = "yyyy-MM-dd-HH"; /** * mmssSSS */ String mmssSSS = "mmssSSS"; /** * HHmmssSSS */ String HHmmssSSS = "HHmmssSSS";
(3)正則表達式
public interface ConstRegex { /** * 郵件 */ String REGEX_EMAIL = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?"; }
Domain
主要包含:基礎實體對象、分頁對象、Response返回對象(可以實現自定義異常的封裝)、進行RPC調用的Response返回對象、枚舉等。
示例:
(1)分頁對象
public class Page<T> implements Serializable { private static final long serialVersionUID = 5859907455479273251L; public static final int DEFAULT_PAGE_SIZE = 10; private int pageSize = DEFAULT_PAGE_SIZE; // 每頁的記錄數 /** * 當前頁碼,從1開始記數 */ private long currentPage = 1; private long start = 0; // 當前頁第一條數據在List中的位置,從0開始 private List<T> data = new ArrayList<T>(); // 當前頁中存放的記錄,類型一般為List private long resultCount; // 總記錄數 public Page(int pageSize, long start, long currentPage) { this.pageSize = pageSize; this.start = start; this.currentPage = currentPage; } /** * 默認構造方法. * @param start 本頁數據在數據庫中的起始位置 * @param totalSize 數據庫中總記錄條數 * @param data 本頁包含的數據 */ public Page(long start, long totalSize, List<T> data) { this.start = start; this.resultCount = totalSize; this.data = data; if (this.data == null) { this.data = new ArrayList<T>(); } } /** * 獲得第一條記錄的截取位置 * @return 第一條記錄的截取位置 */ public long getStart() { if (currentPage - 1 >= 0) { return (currentPage - 1) * pageSize; } return 0; } /** * 默認構造方法. * @param start 本頁數據在數據庫中的起始位置 * @param totalSize 數據庫中總記錄條數 * @param pageSize 本頁容量 * @param data 本頁包含的數據 */ public Page(long start, long totalSize, int pageSize, List<T> data) { this(start, totalSize, data); this.pageSize = pageSize; } public Page() { } 。。。 }
Utils
主要包含:bean的處理工具類(包含反射、轉換等)、時間、編碼、加密、驗證、郵件服務、HTTP請求、文件上傳、URL地址等String類型的組裝等等。
示例:
(1)將Map轉化為Bean實體對象集合:
/** * 把map轉換成JavaBean對象,要求map中的可以、名稱與JavaBean中的屬性相對應 * 如果一個map中有多個javaBean中對應的屬性,則同樣可以實現對不同JavaBean的映射 * @param map * @param clazz * @param <T> * @return 把map轉換成對象 */ public static <T> T MaptoBean(Map map, Class<T> clazz) { try { /* * 1. 通過參數clazz創建實例 * 2. 使用BeanUtils.populate把map的數據封閉到bean中 */ T bean = clazz.newInstance(); ConvertUtils.register(new DateConverter(), java.util.Date.class); BeanUtils.populate(bean, map); return bean; } catch (Exception e) { throw new RuntimeException(e); } }
(2)將Map組裝成String,只組裝第1層的
/** * 將Map組裝成String,只組裝第1層的 * @param paramKeyAndValueMap * @return */ private static String assembleByMap1Level(Map<String, Object> paramKeyAndValueMap) { String url = ""; for (Map.Entry<String, Object> entry : paramKeyAndValueMap.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (StringUtils.isNotBlank(key) && value != null) { StringBuffer urlBuffer = new StringBuffer(); try { Map<String, Object> innerKeyValueMap = JSONObject.parseObject(value.toString(), Map.class); //如果value是個Json字符串則跳過 continue; } catch (Exception e) {//如果拋異常說明value不是Json字符串 urlBuffer.append(key + ConstPunctuation.EQUAL + value + ConstPunctuation.LINK); } url = url + urlBuffer.toString(); } } if (url.endsWith(ConstPunctuation.LINK)) { url = url.substring(0, url.length() - 1); } return url; }
還有很多好用的工具類的哈!
如何使用
項目之間的使用,不存在依賴,使用Maven項目打包:
mvn clean mvn install
可以進行分模塊引用,例如引用util:
<dependency> <groupId>com.xuliugen.common</groupId> <artifactId>util</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
號外
另外,本人也在寫一個基于領域驅動的lib小框架,先看一下大致的架構:
包含緩存、數據庫、日志服務、消息隊列等等這些基礎的領域基礎模塊,實現過程是通過:SPI的方式切換擴展點(類似Dubbo的實現過程),自定義xsd:schema、Spring配置文件注入的方式進行實現,開發者只需要選擇熟悉的方式進行使用即可。
例如:緩存的實現可以有Redis、Memecached等,那我做的是提供統一的Api接口,供開發者調用,開發者只需要引用相應的依賴和在Spring配置文件中設置使用哪一個擴展點,比如使用Redis,那只需要將Redis的賬戶密碼信息通過Spring配置文件的方式就可以實現對Redis的使用,當然我還會對Redis、Memecached進行進一步的封裝,來提高大家的開發效率。
目前這個項目正在開發,有興趣的請關注新浪微博:1573876303@qq.com,最新動態會在第一時間推送。
來自: http://blog.csdn.net/xlgen157387/article/details/50491559