下一代軟體架構是服務化、元件化、可配置化,可配置化成為了軟體架構的最高端別。可配置化架構是軟體架構努力的方向。可配置化架構是指利用可配置的方式構建軟體的方法。它是在領域建模的基礎上,以配置表述業務,以配置組織架構元素(服務、元件、資料),並對配置進行規範化、自動化的管理。
軟體系統最基本的三個層次是表示層、業務邏輯層和資料層,軟體系統相應的可配置性也集中體現在這三個層次中。
一.資料可配置。資料可配置指可以在應用系統內部通過已有的功能修改資料庫結構,修改完畢後可自動生成相應的資料庫操作方法,供軟體其他部分呼叫,無需重新編譯即可自動適應調整後的結果。
二.介面可配置。指軟體系統能通過各種不同的形式來展示資料來源配置的結果。介面配置可分為兩個方面,1)介面定製:能夠對介面展示的形式進行調整以滿足使用者的個性化要求;2)介面控制:能自動適應資料結構的變化,在介面中自動新增或修改相應的資料項。
三.流程可配置。指使用者可利用軟體系統調整業務處理流程和處理方法,並且軟體系統可從多種途徑完成相同的任務,同時軟體系統中存在多種功能或功能的組合來完成使用者相同的 需求。
可配置化軟體系統的實操和秘訣
資料可配置化
1)橫表轉縱表儲存。在資料庫設計時就應考慮可配置因素,傳統的資料庫設計方案是二維資訊集,乙個操作介面對應乙個資料庫表;這這種方式簡單、直觀,但是可配置性較差。當出現需求變動的時候需要改動程式,往往效率較低。
橫表轉縱表儲存的解決方案是將傳統的橫表拆分為3個縱表形式的擴充套件表,包括資料定義表、列定義表和列值表。
例如,原表人員資訊表包括:id、姓名、性別、出生日期、所在單位、職稱、級別、學歷這幾個字段。拆分後的擴充套件表如下,資料定義表:表名。列定義表:列名。列值表:value_id,column_id,column_value。
當需要擴充套件乙個新的字段時,只需要在列定義表中新增新的欄位名,然後在列值表中新增列資料即可。
查詢時採用縱表轉橫表的技術得到和原表相同的查詢效果,資料量較大時的效能問題可以通過索引、分割槽、符合索引等資料庫手段進行優化。另外,可以引入orm資料持久化框架,並提供物件設計器實現所有的業務物件和資料表都動態生成,從而實現資料可配置的功能。
2)彈性字段。有些系統提供了彈性域來實現資料結構的可配置性,乙個彈性域由多個段來組成,每個段是資料庫表中的乙個列。
彈性域又分為關鍵彈性域和說明性彈性域,關鍵彈性域主要用來決定表單的主鍵,它允許根據需要使用任意的**組合以描述實體;說明性彈性域提供了擴充套件表單的空間,系統可以使用說明性彈性域來獲取業務所特有的重要附加資訊。
例如,賬戶欄位是乙個關鍵性彈性域,它由「公司」+「部門」+「科目」+「子目」+「分類」+「專案」六個段組成。在其他的公司中,可以將其定義為由「公司」+「部門」+「科目」這三個段組成的彈性域,也可以增加其他的段,將其定義為七個段組成的彈性域。
表示可配置
1)介面定製。介面定製指能夠對輸入和輸出的形式進行調整以滿足使用者個性化的要求。例如,目前在許多erp軟體中已實現的個性化顯示排序和查詢功能,對任意乙個表單,單擊顯示/排序功能鍵,可以自定義其欄位是否顯示和表單中欄位顯示的順序。
使用者可以勾選顯示框來調整當前字段是否在介面中顯示,同時設定顯示寬度,並按自己的偏好對表單中字段的順序進行排序,決定哪個欄位在前哪個欄位在後;當使用者設定好顯示順序與顯示欄位後可以儲存方案,下一次介面載入時自動呼叫該使用者所偏好的方案。
主要方法是使用配置表或配置檔案儲存使用者的個性化配置資訊,在平台的表示層中預留介面,展現資料時每次都動態讀取該配置檔案,按配置檔案生成查詢表示式來對源資料集進行篩選,如果不存在配置資訊則直接使用源資料集展示資料。
2)介面控制。介面控制指能自動調整輸入、輸出、查詢介面以滿足資料結構的變化。
可以使用介面生成器的方式來完成系統中使用者介面的自動生成。在管理系統中最主要的使用者介面有兩種:批量資料查詢介面和單個資料管理介面,由於這兩種使用者介面的功能大不相同,因此需要在平台系統中為這兩類使用者介面分別設計兩種介面生成器。
可配置介面生成器主要是基於直譯器的設計模式進行開發的,主要包括三個部分:配置檔案的設計、使用者介面直譯器的設計,輸出結果的設計。
①配置檔案的設計。使用xml檔案來形成配置檔案,其中主要定義了介面中控制項的組成和布局資訊。
配置檔案如何生成的演算法是其中的難點:如果是批量資料查詢介面,可以將資料來源中的資料直接繫結到列表或**元件中;如果單個資料管理介面,首先需要遍歷資料結構中的需要顯示的屬性,然後根據屬性型別形成相應的元件,如string型別的屬性形成textbox元件,datetime型別的屬性形成datatimepicker元件等等;然後再根據相應的演算法計算出所有元件的位置布局資訊;最後將這些資訊寫入配置檔案。
②直譯器設計。直譯器的主要作用就是對指定配置檔案中的相關規則和配置資訊進行讀取,根據讀取的資訊利用反射機制產生相關控制項並正確的生成使用者介面。因此直譯器的設計內容主要包括:控制項定位演算法的設計、配置檔案解析方法的設計、以及根據配置檔案生成相關控制項方法的設計。
③輸出結果的設計。接收直譯器產生的控制項資訊,並正確的生成使用者介面。
流程可配置
大部分軟體都使用工作流引擎來實現,工作流引擎有兩個重要的作用:
1)幫助開發人員降低業務處理複雜度,避免流程邏輯的開發。
2)降低軟體維護過程中因為流程變化所帶來的維護量。
工作流引擎需要實現的功能包括流程的解析、資源的分配和邏輯的控制的等工作,主要體現在以下兩個方面。
1)工作流引擎是流程的狀態轉換機,工作流引擎的任務是按照設計好的業務流程來控制例項的狀態轉換。
2)工作流引擎同樣也是流程的路由控制器,其作用是按事先制定好的公式對當前流程狀態進行解析,找出流程下一步的流向,進行例項邏輯處理,使流程向下轉換。
工作流引擎在多數軟體應用系統中是由使用者或實施人員來設計相關業務流程,因此一般會要求具有圖形化的操作介面,包括流程設計器的圖形化介面,設計時使用簡單易用的拖拽方式就能設定流程;應用時可隨時通過圖形化的流程圖讓使用者檢視流程運作情況,能非常直觀的感覺到流程執行狀態;也要求操作便利,提供各種方式讓使用者方便的快速設計業務流程。
此外,工作流引擎還必須支援各種流程特性,包括序列流程、並行流程、子流程、條件路徑、可設定條件人員、可設定許可權、機構、還包括中國特有的會簽流程等等,流程定義工具要求必須能夠滿足以上所有流程特性。
react的表頭可配置化
實現效果 table上面增加乙個按鈕,按鈕觸發乙個model頁面,裡面是checkbox元件,提供表頭欄位的選擇。選中那個字段,table呈現那個字段。從systemtablecolumn表中獲取表的每一字段的資訊 const listcolsbytable axios.get config.hos...
面板可配置化 變數 樣式分離
之前 開發了乙個版本,抽是抽出來了,但是變數只抽出了幾個顏色,沒什麼價值 上個版本開發過程 這次我又進行了一次迭代,現在是乙個較成熟的版本了。整體理一下思路,可以總結為3步走和2層架構 是樣式的子集,想要做 的管理,首先要把涉及到的樣式都抽取出來,這裡只涉及到了 登入頁 考勤頁 頂部選單 3個部分。...
切面定義可配置化及重複註解
專案在這兩個方面進行了 1.切面自定義 一般地,切面都是這樣定義的,由於 pointcut無法通過 注入,所以這個類很難框架化,都需要在業務方法中寫,比較麻煩,下面記錄一種可以配置此值的方式。aspect component pointcut execution public top.jfunc.v...