技術框架篇--第4篇git
用日誌記錄「開源軟件」的誕生github
赤龍ERP開源地址:算法
點亮星標,感謝支持,加微信與開發者交流 kzca2000緩存
碼雲:https://gitee.com/redragon/redragon-erp安全
GitHub:https://github.com/redragon1985/redragon-erp微信
赤龍ERP官網:https://www.redragon-erp.com架構
搭建基礎框架前,必定要準備好開發環境。先安裝軟件(以我本地環境爲例),包括:併發
IDE(Eclipse最新版)app
JDK1.8負載均衡
Tomcat8.5
MySQL8.0
Redis最新版
SVN、Git
安裝流程不作詳細說明。說幾個須要注意的地方:
(1)Tomcat安裝好後須要對server.xml作一些配置和優化(端口、應用、域名、NIO、線程池、SSL等)
(2)對JVM作必要的內存配置優化
(3)MySQL安裝時注意編碼UTF-8
(4)Redis須要配置密碼和持久化(AOF)
搭建應用的底層框架,老是要或多或少的根據情景考慮一些問題,而不能是框架和技術的簡單堆砌。那麼搭建框架要知足哪些要求呢?
(1)安全性:因爲是信息化管理系統,使用的用戶是企業內部的職員和高管,那麼對於安全性和權限的考慮就要提高一個層次了。好比:誰能訪問哪些功能、誰能作哪些操做,誰能看到什麼數據、又使用什麼方式能夠更便捷的實現各類安全性的考慮。
(2)下降信息流的複雜性:簡單解釋一下,ERP系統是一個很特殊的系統,由於它是企業中複雜管理流程、業務流程、財務流程的實現。因此它有着嚴密的邏輯與流程,系統中幾乎沒有獨立的模塊或功能,系統內部各部分互相依賴的複雜程度不可思議。如何下降這些依賴關係的複雜度,就是框架中火燒眉毛解決的問題。
(3)提升開發效率:信息化系統開發時的一大特色就是代碼複用程度高,不管是重複的增刪改查,仍是表單處理,設置是各類報表,太多的重複工做會浪費太多的時間。開發人員應該把工做集中在邏輯和算法上面,而不是這些簡單的複製粘貼修改上。
(4)靈活的可配置可擴展:信息化系統的另外一個特點就是個性化需求很是高,即便對於一個簡單的流程,也可能出現多樣化的各類要求。這每每根據企業的管理狀況而定。如何竭盡所能在減小客戶化開發的前提下,知足更多的需求是咱們要考慮的問題。
(5)下降學習成本和維護成本:因爲這是一款開源軟件,咱們要考慮的不能僅僅是高大上的技術使用,而是要能讓更多的開發者和使用者,能夠快速部署,並進行個性化開發。不管在展現層、控制層、持久層,仍是在各第三方組件的使用中都要儘可能考慮到如何讓更多的人可使用咱們的軟件。
針對以上的要求,咱們如何設計系統,解決問題,並最終搭建知足咱們需求的底層框架呢?咱們一塊兒來嘗試摸索一下。
說到安全性,就離不開登錄、權限、加密這些場景。
(1)登錄我使用了cas,它是一個SSO框架,採用票據驗證機制保證了,認證的安全。
(2)受權我採用了shiro框架與cas無縫整合,根據三類權限的設置,保證了菜單、按鈕、數據的精細控制
(3)加密包括對HTTP頭的加密(SSL),對關鍵業務數據的加密(AES、SHA1)
下降信息流的複雜性,最核心的是如何梳理,如何切分業務,模塊之間如何互相調用。
(1)梳理和切分業務其實更多的是經驗問題,但有個通用的大原則,高內聚;也就是把關聯性極高的功能放在一塊兒,而對外暴露必要的接口供調用便可。其中還要考慮到一些基礎數據的通用化設計。好比:組織信息、職員信息、主數據、數據字典等,單獨設計並對外提供有雙層緩存的接口。(其中也要考慮到緩存的更新策略)
(2)模塊間我用Maven父子項目作了劃分,也爲直接的接口調用和REST風格的API調用作了不一樣方式的設計
如何提升開發效率,應該是咱們認真思考的話題。由於這真的很重要。若是處理得當甚至會節省30%-40%的研發時間。
(1)代碼自動生成工具:我研發了一套能夠自動生成Controller、Service、Dao、Model以及全部配置及註解的工具。當前這是基於我指定的代碼規範。只須要修改兩到三個配置項,便可一鍵在項目下生成咱們所需的代碼。原本至少要編寫半小時的代碼,如今只須要10秒鐘。
(2)可複用的工具包:十幾年積累的全部工具類可提供快速的靜態調用方式
(3)抽絲剝繭,獨立的功能設計:不少經常使用的第三方組件或技術的處理方式,抽象出來,加以複用。好比:線程、Redis、JMS、Socket、Json、Groovy、Mongo等。
(4)多功能的AOP處理:基本思路是經過AOP及自定義註解靈活加入各類輔助處理功能。好比:方法緩存、自動set基礎字段值、日誌處理、數據權限控制等。
(5)必要的通用功能:經過Spring提供的技術,實現異常處理、類型轉換、數據驗證、API請求攔截等各類處理要求。
可配置可擴展其實提及來簡單作起來難。可能不少軟件都是這麼宣傳的,但真正作到的並很少。其實我認爲主要作到以下幾點就能夠了:
(1)字段的可擴展,便可以經過配置的方式增長輔助字段,而且能實現1對1結構,和1對多結構的兩種方式。
(2)流程的靈活處理。軟件每每設計上會固定某一主流程,只要設計上讓這一流程的組織不固定,而相對鬆散的實現便可。
(3)功能性模塊的高度可配:好比權限系統、報表系統、工做流、數據字典
最後一個是有關下降學習成本和維護成本的問題。我以爲這更可能是由於要匹配開源的要求,開源的使用者多數是我的或小團體,這對於普及一款開源產品顯得尤其重要。怎麼作呢?
(1)用最普及的技術、最少的技術種類、實現更多的需求。
(2)提供最簡單的配置文檔以實現程序部署。
爲了考慮單體需求的激增,不得不該對高併發以及高可用的情景。因此如今技術選擇以及底層搭建時就必定要有所考量。當前框架必定要能夠快速引入新技術並能夠高效整合。我認爲Springboot必定是Java語言當下是最優的選擇,也爲SpringCloud的升級作了足夠準備。
固然其中還有不少要考慮的內容,好比:負載均衡、消息隊列、數據總線、讀寫分離、異步併發、降級限流等。在此不展開討論,若是有興趣可與開發者直接溝通。
今天的日誌寫的比較長,但尚未包括不少中間件的優化和配置說明,爲了給開源軟件的使用者簡化他們的部署工做,我會在後面附加一個技術補充文章。
但願您讀完本文能夠幫助筆者進入【碼雲】或【GitHub】點點星標。感謝你們的支持!