基于領域驅動的Java開發工具包Common項目分享

jopen 8年前發布 | 22K 次閱讀 Java開發

項目地址: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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!