|
我一直在從事企業信息管理系統的開發,目前的產品擁有了數百個企業客戶,作為企業管理信息系統,最大的挑戰是如何滿足不同企業通用需求的同時快速滿足企業個性化需求,除了企業戰略、組織架構、流程體系等緊密相關外,軟件的平臺化水平,可擴展性和靈活性至關重要。有一句話很經典:“最好的架構師是能夠在軟件開發所涉及的諸多內部因素和外部因素尋求最佳的平衡”。一個高度平臺化的系統,對高可擴展性和靈活性是非常關注的,今天我想討論如何滿足企業信息管理系統的擴展性和靈活性。這個話題涉及的內容太多了,我只是在做產品和項目過程中談談我的體會,希望對大家有一些參考價值。
(1)高可擴展性和靈活性的系統一般是分層架構的,這里說的分層是指將客戶的需求按需求的通用性分層。根據自己平臺所應用的目標客戶群,分析客戶的共性需求,將共性部分的需求放在平臺的最底層實現,所有的客戶共用,不要有分支版本,個性的需求放在高層實現,不同的客戶可以完全定制。至于整個架構的層次數量沒有絕對的標準,可參考的方法分為4層,“公共平臺層”、“產品平臺層”、“行業擴展層”、“個性擴展層”。這里的分層與軟件架構中的表示層、中間層、持久層的分發屬于不同的維度,是沒有沖突的。
(2)高可擴展性和靈活性的系統一般是模塊化的。系統最好提供統一的主板插件體系,每一層都應該提供若干插槽,通過二次開發的手段供上層擴展,做項目多了一般都會形成組件庫,應該對這些組件進行分類分級管理。一旦有了新的項目,一般從現有的組件庫中挑選進行配置,部分不滿足要求的可以進行修改后滿足,其他個性化很強的完全定制。
(3)高可擴展性和靈活的系統一般都支持數據建模。許多人理解系統可擴展就是指系統提供API,可以二次開發,其實這種理解不全面。數據結構是企業信息管理系統很重要的一部分,是否可以方便支持數據結構的擴展非常重要,我們的經驗是提供圖形化的數據建模模塊,可以自動生成數據庫的表結構,同時將數據庫的結構也保存為元數據,通過解析元數據可實現數據的對象關系映射,而不依賴于硬編碼。一般采用了數據建模的系統將數據進行對象化統一管理,這樣的好處是統一風格,也容易實現。 因為有了元模型,可以動態生成部分用戶界面,減少用戶界面開發工作量。
(4)高可擴展性和靈活的系統一般都支持流程建模。不同企業的業務流程是千變萬化的,所以需要提供業務流程建模模塊,可以用圖形化的方式定義企業的業務流程,依賴業務流程的驅動完成流程的自動化。流程建模中涉及的“活動”(理解為節點)除了標準的之外,也要求是可以自定義的,比如流程中某個節點可以控制生產設備的啟動和停止。流程中另外一塊是控制邏輯,包括線性、分支、循環、并發等。流程一般需要人的參與,所以與任務管理是緊密相關的,可能會涉及集成email,手機短信實現自動通知等。流程中流轉的數據可能也與流程的執行過程相關,比如請假單大于15天,流程可能執行另外的分支。
(5)還有一個需要說明的是狀態模型。一般數據對象都有多個狀態,比如訂單就有未發貨、已發貨、已到貨等狀態,不同狀態下可執行的操作也是不同的,不同的狀態下的權限也會有差別,比如已發布的圖紙就應該是不可修改的,即使有修改權。對象的狀態模型一般是和流程緊密相關的,一般流程的執行過程會改變數據的狀態,比如請假單批準以后,請假單的狀態改為“已批準”。狀態的定義以及狀態的變遷過程可以定義為狀態圖,只有有連線的兩個狀態之間才允許狀態的躍遷。綜上所述,一般按數據類型定義狀態圖,不同的狀態有不同的操作和權限,一般依賴于各種操作或流程改變對象的狀態。
(6)權限模型最好也可以擴展。不同的數據類型通常有一些共同的權限項,比如瀏覽、修改、刪除等,也應該有一些特有的權限,比如用戶就有“修改密碼”權限項,用以控制一些特別的操作。應該支持自定義的權限項,不同的類型授權時權現項不同。一般權限的判斷算法比較復雜,一般不要求可以自定義,主要是因為性能的原因。權限的授予一般也有粒度要求,最小的按單個個體授權,最大的按類型授權,另外一種建議的方式是采用類似文件夾的形式對數據進行管理,可以提供按目錄授權的方式,這樣就更加靈活了。
(7)還有個重要的就是報表。不同的類型都應該可以自定義報表,不同的角色可以看到不同的報表。最好建立報表的框架,開發一個新的報表以后,通過簡單的配置,不依賴于修改代碼,就可以通過系統訪問到報表。報表的各種操作,比如是否可以打印都可以借助配置實現,也可以借助權限體系實現。
(8)還有一點需要提到的是主菜單和主頁。企業中不同的角色都希望只看到與自己工作相關的功能。這就需要可以按角色自定義主菜單和主頁,主頁的自定義可以采用Web part的方法,用戶可以選擇自己需要的Web part,添加到主頁上,通過拖拖拉拉擺放成需要的方式。
最后簡要總結一下,一個系統的可擴展性和靈活性應該是多方面的,包括了分層結構、模塊化、數據建模、流程建模、報表定制、主菜單和主頁定制,甚至還包括權限體系的擴展等方面。當然還包括硬件方面的,如何在高并發和海量數據情況下實現硬件的可伸縮性,還可以采用集群、緩存、云計算等技術。當然真正要構建高擴展性和靈活性的系統難度是很大的,通常都會遇到諸如性能問題,當然我一直最求的一句話“在這樣那樣的要求下尋求最好的平衡”,大部分問題是可以解決的。
it知識庫:企業級信息管理系統的高可擴展性和靈活性,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。