先做個廣告,去皮兒網,可以每月26日通知你是否搖號中簽。http://www.qupier.com

一直以來,組件一直都建立在技術的層面上。由于業務的復雜多變,似乎沒有人想著把業務部分也做成可重用的組件。
我們團隊在過去的兩年里面在這個方面做了一些常識,寫出來供網友參考、拍磚。

場景是企業應用,有大量類似的業務邏輯。

建立了一系列的組件,有技術封裝類(例如對jsf的封裝),有業務處理類的(例如權限,包含用戶、角色等的維護功能,包含頁面)。

這些組件的發布形式都是jar。頁面在META-INF/resources里面。其中也包含了spring的bean(Annotation定義和xml定義)。

具體項目中,想要用什么功能,就依賴什么組件的jar。基礎結構上提供如下幾個關鍵點:

1.找頁面的時候在webapp目錄下找不到,就去jar包中找

這個可以讓組件的jar種的頁面生效。而且,如果組件的頁面不符合項目要求,可以在webapp目錄下寫頁面,相當于是覆蓋組件的頁面。

2.覆蓋組件中的bean。例如有一個UserController,項目認為組件的功能不符合要求,可以以某種機制覆蓋為項目的bean。

這個簡單的可以使用這個規則做到:spring可以配置讓xml中定義的bean替換annotation定義的bean。如果bean在組件中就是用xml方式定義的,那么可以在具體項目中指定不加載某些spring的xml配置文件實現。

3.覆蓋組件中的實體模型

因為組件要完成一整塊的業務,所以其中中包含了模型。例如權限組件會包含User,Role等模型。如果項目認為要擴展屬性(字段),那么可以方便的擴展。我采用的具體做法是在實體類上加入一個Transient的Component,類型是一個抽象的ExtendComponent類。然后擴展了一部分hibernate的代碼,在項目啟動時根據配置讓這個component不再Transient,并且指定具體類型。

根據以上三點,最后的效果是,如果組件功能符合,那么幾乎放個jar包進去(或者做一些配置)就完全可用(例如用戶管理、權限過濾等等功能)。如果不符合,那么采用以上三種機制來擴展組件。