簡露一手-Java-[核心、業務]代碼[拆分、合并],簡單實現項目安全,快速分析,少耦合,減少項目事故,降低新人研發安全和風險,提高編碼加載速度,提升整體項目質量

復雜的故事簡單說,復雜的問題簡單做,您好,這里是簡露一手,歡迎瀏覽。

簡述


每次:項目發布版本,所有人忐忑不安,出過太多次事故,項目模塊大,模塊多,模塊間緊密關聯,哪都會出問題。

一旦:不熟悉項目或新人加入項目或直接是新招的實習生,對于一個還沒有穩定的員工和一個不具備掌控整個代碼風險把控的員工,是否應該把整個項目SVN發給他?給他,項目安全和風險太大;不給,招來干嘛?怎開發?。

就算:自己運行項目,修改代碼時99%的代碼與自己無關,下載慢,加載慢,查找慢,編譯慢,慢慢慢慢慢。

最后:版本成了心頭大患,代碼沒人敢改,偉大了一堆熬夜測試的人。

又發版本

分析


耦合性太強,牽一發而動全身。

  • 項目模塊間關聯緊密,修改一個模塊影響整個項目。
  • 缺少核心模塊和業務模塊的區分。
  • 缺少對核心代碼的剝離和保護措施

處理的方式很多,這里就推薦一種簡單方式。將代碼分成核心包和業務包,建立類庫。

處理


從上面分析來看 關鍵點在于拆,其實隱藏的還有一個合。需產出一種效果:代碼開發時只需要拆分出來的一小部分代碼,而在應用調試和啟動運行的則是一個所有代碼編譯后的合集。簡單點就是一拆一合,分兩個步驟:拆、合。

處理思維

拆是指把整個項目按照一定的思維邏輯進行核心和業務拆分。這個一定的思維邏輯是說符合項目本身架構核心和業務核心,我們這里先用包來稱呼,后面好表述。最上層分為:核心包、業務包。核心包以外的部分作為業務包,核心包為一個或極少的幾包;而業務包是無限擴展的很多個包,如:新增一個日志查詢模塊,則建立日志業務包。這個業務包和核心包中間的關系,重點:業務包依賴于核心包,而核心包不依賴于任何業務包。到這里都是一個概念的表述,實際以Eclipse為例操作分三個步驟來做:建子項目、遷移代碼、解耦調整。

拆項目

為方便講解,這里先創建了一個簡單的項目:georgekaren,主要業務是客戶端ClientSoap調用Server查詢Adsl、Cdma、User三個業務的業務信息,項目模塊:

項目模塊

建子項目

項目framework、db、util和server包的server對象放到核心包,業務包根據功能和業務邏輯拆分后包括:client包、cron包、log包、server包[分成Adsl業務擴展包、Cdma業務擴展包、User業務擴展包]、webservice包。針對每一個包建立一個子項目[如果業務包有Web依賴,則創建Web項目],如下。

拆分業務包

這里不要嫌創建的項目多而覺得繁雜,創建項目時間比較短,合包后很方便。

遷移代碼

項目建立好之后就開始將原始項目中的代碼復制到新建的項目中去,遷移過去的代碼或多或少會由于依賴關系會有編譯報錯,留給后面步驟去處理。

遷移代碼

解耦調整

代碼遷移完成后,需要做的就是修正編譯錯誤。主要有兩個手段,其一是給項目添加依賴引用,業務包除了對core的依賴盡量減少對其它包的依賴,可以適量修改代碼來完成;其二是調整core對所有業務包的依賴,使核心包不依賴業務包,并且不影響Client調用Server的業務。

  • 項目添加引用,屬性設置Java Build Path。
  • 調整core 的引用,采用loadClass方式來替代直接new 業務Server
    實際生產用的時候大部分使用的工廠,這里就不去創建一個工廠了,直接貼loadClass,表述的原理一樣。

    Old


New

這樣改造后core核心包的編譯不依賴Server業務包,通常有數據庫的情況下,將serverName和MethonName存到數據庫表中,由程序根據type自動從數據庫中查詢,這樣的處理有個詞叫插件;當一個客戶請求需要先查詢Adsl業務再加上Cdma或先查詢User再查詢Adsl場景時只需要更改數據庫配置的插件和插件的順序,就可以組成不同的業務場景,這在流程配置上,尤其有效。

合是指把整個項目拆分后在單獨開發或運行的時候怎么得到其它業務包的編譯文件,這個是一個合的過程。這里介紹的處理方式是:類庫,打包。


建類庫
建類庫是指建設一個存放公共jar或其它公共文件的地方,可以是個文件夾,可以是個項目,這里我們建立一個項目,并建立一個文件夾publib,將用于存放所有的包。

類庫

打包
打包時將所有核心、業務包編譯成class并打成jar包。這里使用Eclipse自帶的ant自動打包。操作:

  • 業務包項目上右鍵--屬性--Export(導出)--Ant


    導出

    生成ant的build.xml文件,修改build.xml的兩處地方,1.第一行的default="build" 修改為 default="package";2.path 下面增加target來配置導出jar的路徑。

配置Ant文件

按照此方式將所有的業務包項目都配置ant,配置完成后再Build.xml上右鍵Run執行,jar就自動導出到類庫的publib下了。


導出jar

到這里類庫就已經有了所有jar,所有的包全部合到了類庫中。

效果

回頭看下最初的問題:

  • 發版本問題,只需要關注有業務改動的jar,沒有那么多動蕩,回退也相當的方便,替換修改的jar就完成了回退。
  • 新人安全問題,如讓新人修改adsl業務的一個需求,只給予Adsl項目權限和pub項目的權限就OK了,核心代碼和其它模塊都是安全的。
  • 代碼多,加載慢問題,修改cdma則只下載cdma代碼,業務包的代碼量極少,慢問題迎刃而解。

總結

拆分是手段,類庫打包是方法;原則是少代碼,多包,非核心少依賴。做成功了可以任意配置需要使用的業務包,按照不同數量和不同的順序串起來可以產生無限種業務功能。

<small>作為商業項目,完成后還需要一步,對核心代碼或關鍵業務包進行保密處理,而簡單又有效的方式就是混淆,如有意,請留言,根據情況找時間再補上混淆保密的文章</small>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,696評論 25 708
  • 有青衿寄蟹解饞偶感 秋暮稻香尤蟹肥,吾將老酒誤瓊妃。 半斤醉了癡情漢,一夢醒來大帝威。 慨嘆人生爭富貴,騷吟世事競...
    東坡門生閱讀 213評論 2 4
  • 詩的電影介紹所 今天要講的故事發生在美國新澤西州的帕特森(Parteson)。那里有遍地濃郁茂盛的植物,一排排老舊...
    詩歌島閱讀 1,220評論 0 2
  • 經歷了這么多起起落落,看過了這么多悲歡離合,以為自己已經變得足夠堅強了。可沒有料到,原來在內心的最深處仍然有那么...
    妍非妲己閱讀 249評論 0 0