創新談-張憲偉

(創新性應用:)
    從所參與的項目來看,中創軟件在RBAC權限構件化和展示標籤化兩個方面的應用應該是比較創新的,在新汶礦業集團煤炭營銷管理信息系統、中鐵集裝箱箱管系統兩個項目中得到充分發揮,並得到了用戶和開發人員的認可。
權限的構件化。我們知道現在所做的應用系統中,都會對權限做出明確的要求,對資源的訪問是有嚴格限定的。中創軟件開發了一個基本角色管理的rbac構件,可以滿足這樣的權限管理要求。下面簡單介紹一下rbac構件:
一)、   實體對象概述。
rbac中重要的實體對象有5個,分別是:group(組),user(用戶),resource(資源)、permission(許可),role(角色)
在系統中應用如圖:
(其中機構管理指的是對組進行維護管理)
二)、   實體對象關係描述。
1.一個用戶、資源、角色應該屬於某一個組,通過groupId字段與某一個組關聯。當一個組被刪除或置爲無效時,該組內所有的用戶、資源、角色將被刪除或置爲無效。
對應的表有rbac_group,rbac_role,rbac_resource,rbac_user;
2.一個許可(permission)應該屬於某種資源,通過resourceId字段與某一種資源關聯,當某種資源被刪除或置爲無效時,相應的許可也會被刪除或置爲無效
對應的表有:rbac_resource,rbac_permission.
三)、   實體操作。
rbac中核心的操作有:
1.    給角色授權
即給角色授予或撤銷某些訪問許可(permission)(主要針對資源來說),
對應的表有:rbac_role_permission,該表紀錄哪些角色擁有哪些許可。
在系統中應用如圖:
2.  給用戶授權
給用戶授予或撤銷某些角色(role)
對應的表有rbac_user_group_role
在系統中應用如圖:
3.  組間授權:
即將某個組擁有的角色授給另一個組
對應的表有:rbac_group_group_role
在系統中應用如圖:
四)、   組件的配置(以J2EE項目爲例)。
按照下面的步驟將本組件配置到你的WEB應用中。
     具體配置步驟如下:
1.配置數據庫
     在數據庫中建立權限所需要的表。
2.應用系統的WEB應用中配置信息發佈
 
展示標籤化(特指與J2EE相關的項目)。
在實際的應用中可能有這樣的需求,需要將數據庫中某個表的結果展示出來,以供用戶來選擇其中某個值,如果在系統中存在大量此類型的需求,那麼用標籤來實現將是一不錯的選擇。
下面來介紹一下中創軟件的參數標籤構件:(從如何使用角度來說明)
一)、   構件簡介。
1.代碼或標識到名稱的轉換,在展示時顯示的是名稱,後臺獲取到的是代碼或標識
2.級連標籤的使用:在實際應用中當某一個html元素的值發生變化時影響另外一個html元素的值,典型的情況包括如下幾個方面:
輸入代碼,過濾或定位select元素中某個值
    選擇某一Select,根據選擇的值過濾另外一個Select的值
    有時級連關係爲多級級連
3. WEB項目中的很多內容存儲的爲代碼,展示名稱在程序中寫死,往往帶來系統拓展方面的問題,如增加一個參數項目往往需要修改程序代碼。
上面列舉的三個方面,是中創軟件開發參數標籤構件的目的。
二)、   構件使用。
1參數標籤的配置
把配置文件parameters.xml放在WEB-INF/classes下,修改配置文件。
1)參數項的值保存在數據庫中,需要sql語句獲得值的參數標籤的配置方法 <entry key="rbacgroup">
        <bean
class="com.cvicse.parameter.SQLParameterConfig"> //配置對象類名
           <property name="managerClass">
<value>com.cvicse. parameter.SQLParameterManager</value>//管理對象類名
                                          </property>
                                          <property name="dataSource">
                       <value>jdbc.default</value>
                                          </property>
<!—SQLParameterManager 對應的SQL String-->
                                          <property name="sqlStr">
                                                 <value>select id,code,name,’’,’true’ from rbac_group</value>
/*注意:sql中這五個字段必須要有,而且必須按照現在的順序。
id表示結果集唯一標識字段(在參數標籤中表現爲標識),code表示結果集的代碼字段(若表中不存在code字段,可以把code設爲id或者爲’’),name表示結果集的name字段(在參數標籤中表現爲名稱),第四個字段是filter字段,該字段主要在級聯標籤中,filter的值一般爲上級標籤的id。第五個字段表示該行數據是否有效。*/
                                          </property>
                                   </bean>
                            </entry>
 
2參數標籤的使用
參數標籤使用說明
參數輸入標籤:parameter:text, 參數手工輸入的標籤。
 
名稱
 
是否必輸項目
是否可以使用jsp表達式
說明
type
參數類型
True
False
parameter.xml中配置項內的entry的鍵值對應,詳見配置文件說明
name
對象名稱
True
False
標識page/request/session/application上下文中通過setAttribute方法設置的對象的名稱。該屬性與property屬性一起組合取得page/request/session/application中的對象的屬性值
property
對象的屬性名
True
False
標識,屬性標識對象的屬性名。該屬性與name屬性一起組合取得page/request/session/application中的對象的屬性值
styleId
生成Html:input元素的標識
True
True
 
maxlength
生成input元素的最大長度
false
true
輸入框的最大長度
size
生成input元素的尺寸
False
true
輸入框的展示尺寸
notifier
通知標籤對象的標識
False
True
通知數據進行變更的HTML元素的標識。
next
下一光標鎖定的HTML對象
False
True
在按回車時,光標跳轉的下一HTML元素的標識
示例:
<parameter:text name="test" property="id" styleId="testtest" next="testtest2" maxlength="2" size="2"/>
 
(行業借鑑經驗:)
   從所做的幾個項目來看,走構件化之路可以爲企業在競爭中增加籌碼;遵循業界常用的先進的則可以減少我們走彎路的機會
走構件化之路。
構件技術,可以用來解決軟件複用,通過開發可複用構件和使用可複用構件開發,可以使軟件企業提高生產率,降低生產成本,增強競爭力。同時採用構件化把軟件作坊式的開發變成基於構件複用組裝的生產線式的開發,從技術角度來推動軟件產業的發展。
開發原則。
用例驅動的軟件開發模式,
通過用例實現對涉衆關注點(功能需求、非功能需求或系統的設計約束)的理解和捕獲;
運用面向方面的思想-使關注點保持分離,
使橫切關注點保持分離,
使對等關注點(用例之間沒有關聯,是獨立和相互分離的用例,但它們的實現和引入的職責卻交織於相同的類中)保持分離,避免纏繞和分散;
採用迭代和增量的生命週期模型,
每個迭代週期完成以下工作,
尋找用例並詳細說明,
設計每個用例,
設計並實現每個類,
測試每個用例。
 
 
(應用難點技巧:)
    下面列舉了一些我所參與項目開發中,遇到的典型問題及解決方案:
1.       數據庫varchar2數據類型存儲精度問題,解決方案:更換jdbc驅動包Oracle
2.       SQL的優化問題:
1)        通過ROWID訪問表.開發中可以採用基於ROWID的訪問方式情況,提高訪問表的效率, , ROWID包含了表中記錄的物理位置信息,ORACLE採用索引(INDEX)實現了數據和存放數據的物理位置(ROWID)之間的聯繫. 通常索引提供了快速訪問ROWID的方法,因此那些基於索引列的查詢就可以得到性能上的提高
2)        where條件中儘量減少使用常量比較,改用宿主變量,也就是使用綁定變量(採用Hibernate的模塊不用考慮);ORACLE採用自下而上的順序解析WHERE子句,根據這個原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數量記錄的條件必須寫在WHERE子句的末尾;ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最後的表(基礎表 driving table)將被最先處理. FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作爲基礎表;在ORACLE中使用DECODE函數可以避免重複掃描相同記錄或重複連接相同的表
3)        。在SQL語的處理階段中,第一階段分析(parse)是與Bind Variables密切相關的一個步驟。在分析階段,SQL語句從用戶進程傳遞到服務器進程,服務器進程根據語句每個字符的ASCII值對數據進行散列(hash),然後在共享池中搜索SQL語句的副本。如果該SQL語句在散列地址中不存在,則需要進行硬解析,即服務器進程對SQL語句進行語法檢查、對象解析和權限檢查,執行成功後建立分析樹和SQL語句的執行計劃,如果在散列地址中存在,則重用已存在的分析樹和執行計劃,即軟解析,顯然軟解析的效率更高。Bind Variables
4)        藉助工具來查看、分析SQL的性能。在DB2中可以借用自帶的“存取方案”功能來看SQL的性能;在oracle中可以將其自帶的自動統計功能打開(在sql*plus中set autotrace on)。也可以借用外部工具。
 
  
參考文獻:
1 rbac實體關係—中創軟件內部文檔
2權限配置說明—中創軟件內部文檔
3參數標籤構件使用手冊—中創軟件內部文檔
4《中國計算機報》上海構件化系列報道
5 oralce_sql性能優化(來自www.itpub.net網站)  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章