SaaS模式和實現思路


EFW框架開發的系統支持SaaS模式和實現思路

回《【開源】EFW框架系列文章索引》       

 EFW框架源代碼下載V1.3:http://pan.baidu.com/s/1c0dADO0

 EFW框架實例源代碼下載:http://pan.baidu.com/s/1eQCc69G

 

      前言:以前做一個區域性醫院信息系統項目,包括幾十家小醫院都需要上醫院信息系統,以前系統都是單機構版的,就是必須要每個醫院去安裝,程序和數據庫都是每個醫院一套,這樣的系統來做這個項目肯定不行,維護實施成本太高了,所以這么多醫院必須統一一套程序和數據庫。而且為了客戶機免安裝,最好做成Web版系統,只用瀏覽器輸入地址就可以使用系統;通過對單機構版的系統進行了一次大的改版,由原來的CS架構改為BS架構,由原來數據庫只支持一個醫院改成支持多個醫院,而且控制器機構與機構之間業務數據不同相互訪問;改版后的系統后就有點類似於SaaS模式;現在EFW框架針對SaaS模式的一些特點,做了一些功能擴展,讓我們開發系統的起點就是支持多機構的;但是在業務開發的時候又無需考慮多機構,只需單機構的思想編寫代碼,機構的區分框架幫我們處理;

本文要點

1.SaaS介紹

2.EFW框架中支持Saas的兩個技術實現

3.如何開發SaaS模式程序?

4.WorkId的值的傳遞原理

5.總結

 

1.SaaS介紹

      SaaS是Software-as-a-service(軟件即服務)。

      SaaS是一種通過Internet提供軟件的模式,用戶不用再購買軟件,而改用向提供商租用基於Web的軟件,來管理企業經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件,對於許多小型企業來說,SaaS是采用先進技術的最好途徑,它消除了企業購買、構建和維護基礎設施和應用程序的需要;

      所以我們開發一個系統要讓它支持SaaS模式,首先它必須是Web程序,這樣客戶不用另外安裝程序,只需要瀏覽器就可以直接使用;其次系統要支持“按需收費”,不同級別的客戶可能使用的系統模塊有區別,那么我們的系統必須支持按權限配置系統模塊;還有就是我們的系統肯定只有運行一套在中心服務器,數據庫也只有一套,卻要滿足不同的客戶使用系統,而且客戶之間的數據又要完全獨立,這樣需要我們在系統中有隔離機制可以按照機構區分業務數據;

 

2.EFW框架中支持Saas的兩個技術實現

1)根據注冊機構的級別,提供不同功能模塊,實現按需收費

       不同機構的按需收費,可以利用框架中的權限管理來實現。前面有一章有講EFW框架權限管理,權限控制簡單來說就是,角色配置模塊菜單,用戶綁定角色,用戶登錄后根據上述配置動態生成系統菜單而達到權限的控制;不同的機構可以維護不同的角色;如果菜單級別的權限還不能滿足,還可以使用頁面子權限進行頁面中控件操作、數據顯示都可以控制;

2)一個數據庫隔離不同機構的業務數據

       不同機構的業務數據隔離,首先框架基礎數據字典中有一張機構表,管理所有機構數據,另外所有業務表都架構機構編碼WorkId字段,產生的業務數據的時候把WorkId寫入,這樣用戶查詢數據的時候根據用戶綁定的WorkId過濾業務表的數據;

另外如果系統不需要支持多機構,就只有一個機構,那每個業務表加一個WorkId字段比較別扭,框架提供了SaaS開關,為false的時候就不需要WorkId字段;

 

3.如何開發SaaS模式程序?

1)添加一個新機構

新增機構后,默認創建一個機構的超級用戶,機構“企業級系統”和“測試系統”的超級用戶分別為“admin”,“admin2”,兩個用戶分別登錄,打開“書籍管理”功能,如此兩個用戶顯示書籍列表數據不同。

  

2)Books表結構及界面數據顯示

 

3)代碼實現

實體Book的配置,與SaaS有關的配置是IsGB,如果IsGB=true實體不區分機構,IsGB=false實體區分機構,這里Book是業務實體所以要區分機構,而一般只有字典數據配置為true;

 

實體使用ORM保存數據時候並不需要指定WorkId的值,而且Book實體也沒有WorkId屬性;而插入數據庫中WorkId值是框架中ORM自動處理的,這樣編寫程序的時候不需要關注WorkId,簡化編碼代碼;

 

實體解決不了的復雜數據庫操作,就使用Dao,Dao里面都是直接使用SQL語句操作數據庫,所以當多機構的時候,Where條件后必須加上WorkId條件;

 

 

4.WorkId的值的傳遞實現

       上面實例中的代碼,在使用frmBook.currBook.save(); 和 strsql = string.Format(strsql, searchChar, flag,WorkId); 中的WorkId值是怎么來的?

1)用戶登錄后,根據用戶名就能得到用戶的機構編碼WorkId,並緩存在“RoleUser”,一個用戶只能屬於一個機構;

2)打開界面的時候初始化控制器,同時實例化oleDb對象,oleDb對象有WorkId屬性,值從緩存“RoleUser”取登錄的WorkId綁定給oleDb對象,控制器中的所有代碼以及后台代碼實現都是使用的此oleDb對象操作數據庫,所以必須將oleDb對象在Controller、ObjectModel、Entity、Dao中傳遞,同樣多機構需要的WorkId值跟着oleDb對象就在各個對象中傳遞;

3)控制器對象將oleDb傳遞給ObjectModel對象,實例化對象必須使用NewObject()方法,通過此方法實現oleDb對象傳遞。所以如果使用new來實例化ObjectModel對象是不能操作數據庫的;

4)oleDb傳遞給Dao對象,實例化對象必須使用NewDao()方法;

5)Dao中的WorkId

 

5.總結

   使用框架開發SaaS模式的程序,只需要注意這幾點:

1)配置文件中的IsSaas=true

2)業務實體的類名自定義屬性IsGB=false

3)數據庫中業務表必須增加WorkId字段

4)后台代碼可以直接隨時獲取WorkId的值

 
標簽:  WebwinformnetefwSaaS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM