<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 11, 文章 - 1, 評(píng)論 - 20, 引用 - 0
    數(shù)據(jù)加載中……

    不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向

    最近在繼續(xù)深入的,完整的實(shí)現(xiàn)前面文章《基于事件分發(fā)機(jī)制的企業(yè)應(yīng)用開發(fā) 》和《基于攔截器的企業(yè)應(yīng)用構(gòu)造》中所構(gòu)思的想法,在印象中,權(quán)限系統(tǒng)和組織結(jié)構(gòu)是任何一個(gè)ERP系統(tǒng)都會(huì)用到的,不是隨便兩下就能實(shí)現(xiàn)的簡(jiǎn)單功能模塊,實(shí)現(xiàn)了這兩個(gè)子模塊后,無論什么地方都會(huì)用得著,于是便從這兩個(gè)功能入手,目前把基于RBAC的權(quán)限系統(tǒng)完整實(shí)現(xiàn)了,組織結(jié)構(gòu)實(shí)現(xiàn)了80%,隨著代碼以及邏輯的增加,基于Spring IOC的配置也開始復(fù)雜起來,不過這個(gè)是無法避免的,畢竟系統(tǒng)目標(biāo)是高度可定制,高度靈活的可配置性就意味著復(fù)雜性,這里的復(fù)雜性不是僅僅指Spring配置語法,而是指各個(gè)Bean之間的關(guān)系,每一個(gè)Service目前都必須做事務(wù)控制,安全控制,事件轉(zhuǎn)換,而且問題已經(jīng)不僅僅是Service的配置問題了,隨著系統(tǒng)事件的增多,慢慢的各個(gè)事件間的邏輯關(guān)系也必須被表示出來,使得目前不得不引入了事件堆棧的概念,用來表示源于同一個(gè)操作導(dǎo)致的雪崩式的事件關(guān)系,目前的事件堆棧還比較簡(jiǎn)單,但是作為一個(gè)架構(gòu)設(shè)計(jì)人員的敏感,我們已經(jīng)嗅到了還需要把事件管理深化下去的一絲氣味。這些層次,這些邏輯,已經(jīng)是不能簡(jiǎn)單的靠看Spring配置才能理解的了,這個(gè)還是我們一個(gè)JVM進(jìn)程能產(chǎn)生的需求,而多個(gè)程序,甚至多個(gè)系統(tǒng)集成的概念需求(例如SOA),會(huì)比這個(gè)更加復(fù)雜。在本例中,系統(tǒng)需要一個(gè)圖形化的容易管理配置bean之間復(fù)雜關(guān)系的工具的需求越來越迫切。很自然的,我們得出一個(gè)結(jié)論:系統(tǒng)配置的圖形化,形象化成為了業(yè)界可能的下一個(gè)發(fā)展方向。

    ps:該工具最好是一個(gè)圖形化的,可作進(jìn)行運(yùn)行時(shí)“熱修改”的配置定義工具兼Service管理工具,JMX似乎是一個(gè)可以考慮的方向,不過還沒想清楚如何與該配置工具緊密結(jié)合,我只是希望能夠象扳動(dòng)水管開關(guān)一樣調(diào)整各個(gè)圖形間的連接,系統(tǒng)里的事件流就會(huì)隨之改變,事務(wù)管理,安全控制也會(huì)隨之改變。不知道哪位同學(xué)知道有類似功能的東西,還勞請(qǐng)留個(gè)言告知一聲。如果沒有的話,就只能等本系統(tǒng)告一段落后再來解決這個(gè)問題了。如果您正在發(fā)愁不知發(fā)展方向在哪,看到了這篇文章而有所啟發(fā)去做出這樣一個(gè)工具的話,還希望能便宜點(diǎn)賣我一份 ;)。


    雖然上面說了那么多,指出了IOC工具的又一個(gè)發(fā)展方向,但是我目前面臨的問題還沒有解決 :(

    為了展示一下這個(gè)復(fù)雜度,現(xiàn)在把該系統(tǒng)其中的兩個(gè)模塊的Spring配置show出來:
    <beans>
    ????
    <!--?組織?-->
    ????
    <bean?id="orgService"?parent="baseTxProxy">
    ????????
    <property?name="target"><ref?local="orgServiceProxy"/></property>
    ????
    </bean>
    ????
    <bean?id="orgServiceImpl"?class="com.wolfsquare.ibase.org.service.OrgService"?autowire="byName">
    ????????
    <property?name="orgTypeService">
    ????????????
    <ref?bean="orgTypeServiceImpl"/>
    ????????
    </property>
    ????
    </bean>????

    ????
    <!--?組織類型?-->
    ????
    <bean?id="orgTypeService"?parent="baseTxProxy">
    ????????
    <property?name="target"><ref?local="orgTypeServiceImpl"/></property>
    ????
    </bean>
    ????
    <bean?id="orgTypeServiceImpl"?class="com.wolfsquare.ibase.org.service.OrgTypeService"?autowire="byName"/>
    ????
    ????
    <!--?單位?-->
    ????
    <bean?id="unitService"?parent="baseTxProxy">
    ????????
    <property?name="target"><ref?local="unitServiceImpl"/></property>
    ????
    </bean>
    ????
    <bean?id="unitServiceImpl"?class="com.wolfsquare.ibase.org.service.UnitService"?autowire="byName">
    ????????
    ????????
    <property?name="lifecycleListeners">
    ????????????
    <list>
    ????????????????
    <!--<ref?bean="unitListener"/>-->
    ????????????????
    <ref?bean="objectSyncOrgListener"/>
    ????????????
    </list>
    ????????
    </property>
    ????????
    ????
    </bean>
    ????
    ????
    <bean?id="unitListener"?class="com.wolfsquare.ibase.org.listener.UnitListener"??autowire="byName">
    ????????
    <property?name="roleService"><ref?bean="roleService"/></property>
    ????
    </bean>
    ????????
    ????
    <!--?個(gè)人?-->
    ????
    <bean?id="personService"?parent="baseTxProxy">
    ????????
    <property?name="target"><ref?local="personServiceImpl"/></property>
    ????
    </bean>
    ????
    <bean?id="personServiceImpl"?class="com.wolfsquare.ibase.org.service.PersonService"?autowire="byName">
    ????????
    <property?name="lifecycleListeners">
    ????????????
    <list>
    ????????????????
    <ref?bean="objectSyncOrgListener"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    ????
    <!--?身份-角色偵聽器?-->
    ????
    <bean?id="personRoleListener"?class="com.wolfsquare.ibase.org.listener.RoleListener">????
    ????????
    <property?name="roleService">
    ????????????
    <ref?bean="roleServiceProxy"/>
    ????????
    </property>
    ????
    </bean>
    ????
    <!--?組織機(jī)構(gòu)創(chuàng)建刪除-資源同步?監(jiān)聽器?-->
    ????
    <bean?id="orgResourceSyncListener"?class="com.wolfsquare.ibase.org.listener.OrgResourceSyncListener">
    ????????
    <property?name="categoryName"><value>組織機(jī)構(gòu)</value></property>????????????
    ????????
    <property?name="resourceService">
    ????????????
    <ref?bean="resourceServiceImpl"/>
    ????????
    </property>
    ????????
    <property?name="includeTypes">
    ????????????
    <list>
    ????????????????
    <value>unit</value>
    ????????????????
    <value>person</value>
    ????????????????
    <value>role</value>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="orgRoleListener"?class="com.wolfsquare.ibase.org.listener.OrgRoleListener">????
    ????????
    <property?name="roleService">
    ????????????
    <ref?bean="roleService"/>
    ????????
    </property>
    ????????
    <property?name="excludeTypes">
    ????????????
    <list>
    ????????????????
    <value>role</value>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    ????
    <!--?組織結(jié)構(gòu)對(duì)象刪除偵聽器?,需要掛接到需要同步的Service上-->
    ????
    <bean?id="objectSyncOrgListener"?class="com.wolfsquare.ibase.org.listener.ObjectSyncOrgListener">????
    ????????
    <property?name="orgService">
    ????????????
    <ref?bean="orgServiceImpl"/>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="personToOrgRoleListener"?class="com.wolfsquare.ibase.org.listener.PersonToOrgRoleListener">????
    ????????
    <property?name="roleService">
    ????????????
    <ref?bean="roleServiceProxy"/>
    ????????
    </property>
    ????
    </bean>????
    ????
    <bean?id="orgSecurityListener"?class="com.wolfsquare.ibase.org.listener.SecurityListener">????
    ????????
    <property?name="permService">
    ????????????
    <ref?bean="permServiceImpl"/>
    ????????
    </property>
    ????????
    <property?name="resourceService">
    ????????????
    <ref?bean="resourceServiceImpl"/>
    ????????
    </property>????
    ????????
    <property?name="functionService">
    ????????????
    <ref?bean="functionServiceImpl"/>
    ????????
    </property>????????
    ????
    </bean>????

    ????
    <bean?id="orgServiceProxy"?class="org.springframework.aop.framework.ProxyFactoryBean">
    ????????
    <property?name="target">
    ????????????
    <ref?local="orgServiceImpl"/>
    ????????
    </property>
    ????????
    <property?name="interceptorNames">
    ????????????
    <list>
    ????????????????
    <value>rsi</value>
    ????????????
    </list>
    ????????
    </property>
    ????????
    <property?name="singleton">
    ????????????
    <value>true</value>
    ????????
    </property>
    ????
    </bean>
    ????
    ????
    <bean?id="orgEventBrocaster"?class="com.wolfsquare.ibase.org.event.OrgEventBrocaster"?singleton="true">
    ????????
    <property?name="lifecycleListeners">
    ????????????
    <list>
    ????????????????
    <ref?bean="orgSecurityListener"/>????????????
    ????????????????
    <ref?bean="orgResourceSyncListener"/>
    ????????????????
    <ref?bean="orgRoleListener"/>
    ????????????????
    <ref?bean="personToOrgRoleListener"/>???????
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>
    </beans>
    角色模塊的配置:
    <beans>
    ????
    <!--?角色?-->
    ????
    <bean?id="roleService"?parent="baseTxProxy">
    ????????
    <property?name="target"><ref?local="roleServiceProxy"/></property>
    ????
    </bean>
    ????
    <bean?id="roleServiceImpl"?class="com.wolfsquare.ibase.role.service.RoleService"?autowire="byName">
    ????????
    <property?name="personService">
    ????????????
    <ref?bean="personServiceImpl"/>
    ????????
    </property>
    ????
    </bean>
    ????
    ????
    <bean?id="roleServiceProxy"?class="org.springframework.aop.framework.ProxyFactoryBean">
    ????????
    <property?name="target">
    ????????????
    <ref?local="roleServiceImpl"/>
    ????????
    </property>
    ????????
    <property?name="interceptorNames">
    ????????????
    <list>
    ????????????????
    <value>rsi</value>
    ????????????
    </list>
    ????????
    </property>
    ????????
    <property?name="singleton">
    ????????????
    <value>true</value>
    ????????
    </property>
    ????
    </bean>

    ????
    <bean?id="rsi"?class="com.wolfsquare.core.service.ServiceInterceptor">
    ????????
    <property?name="interceptorMap">
    ????????????
    <map>
    ????????????????
    <entry?key="com.wolfsquare.ibase.role.service.RoleService">
    ????????????????????
    <list>
    ????????????????????????
    <ref?local="eventBrocaster"/>
    ????????????????????
    </list>
    ????????????????
    </entry>
    ????????????????
    <entry?key="com.wolfsquare.ibase.org.service.OrgService">
    ????????????????????
    <list>
    ????????????????????????
    <ref?bean="orgEventBrocaster"/>
    ????????????????????
    </list>
    ????????????????
    </entry>
    ????????????
    </map>
    ????????
    </property>
    ????
    </bean>
    ????
    ????
    <bean?id="eventBrocaster"?class="com.wolfsquare.core.service.EventBrocaster"?singleton="true">
    ????????
    <property?name="lifecycleListeners">
    ????????????
    <list>
    ????????????????
    <ref?bean="objectSyncOrgListener"/>
    ????????????????
    <ref?bean="personRoleListener"/>
    ????????????
    </list>
    ????????
    </property>
    ????
    </bean>

    </beans>

    最后,為了避免文章過于枯燥,還是show一下系統(tǒng)截圖吧;)

    一個(gè)典型的組織創(chuàng)建操作導(dǎo)致的事件的產(chǎn)生傳遞圖:


    組織管理的界面:

    當(dāng)前用戶的權(quán)限,按角色分類:右邊根節(jié)點(diǎn)表示的是登錄帳戶,王小二是身份,相當(dāng)于權(quán)限場(chǎng)景(session)

    整個(gè)組織的權(quán)限分布圖:

    應(yīng)某位同學(xué)的要求,把系統(tǒng)實(shí)體圖加上:

    posted on 2006-06-08 00:30 wolfsquare 閱讀(1951) 評(píng)論(7)  編輯  收藏 所屬分類: 企業(yè)應(yīng)用

    評(píng)論

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    我想看看你的基本實(shí)體是什么,以及他們之間的關(guān)系。
    比如組織機(jī)構(gòu),用戶,角色,應(yīng)用(資源),權(quán)限等
    2006-06-08 08:13 | 人要有夢(mèng)想

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    我個(gè)人覺得,

    組織可以是個(gè)樹型結(jié)構(gòu),人員不是,人員之間的關(guān)系很復(fù)雜。人組之間的關(guān)系是多對(duì)多。人,組,人組關(guān)系都是角色分配的對(duì)象。角色是對(duì)資源權(quán)限的一個(gè)劃分,劃分標(biāo)準(zhǔn)可以不同,可以多樣性。資源可以是應(yīng)用,比如你說的菜單其實(shí)就是一個(gè)應(yīng)用的樹。而權(quán)限呢?應(yīng)該是應(yīng)用的權(quán)限,這個(gè)權(quán)限可以分級(jí)別的。可以有操作上的,可以有數(shù)據(jù)上的,可以有應(yīng)用接口級(jí)別的,等等,粒度可以自由控制。

    2006-06-08 08:28 | 人要有夢(mèng)想

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    加上了實(shí)體圖(最后一幅),RBAC以及其衍生類型已經(jīng)非常成熟了,幾乎沒有什么可以討論的了。
    2006-06-08 20:03 | wolfsquare

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    我想問一下,對(duì)于分級(jí)的權(quán)限管理,在你的這個(gè)模型里面如何實(shí)現(xiàn),就是每一個(gè)組織機(jī)構(gòu)和部分,比如你上面的洗衣科技和天庭實(shí)業(yè),如果想實(shí)現(xiàn)能分別管理自己公司內(nèi)部的權(quán)限,可以添加、修改角色,管理本公司人員信息,你現(xiàn)在的設(shè)計(jì)能做到這個(gè)需求么
    這里要注意,兩個(gè)子公司可能都有普通職員這個(gè)角色,但是實(shí)際權(quán)限不同的,或者洗衣科技想修改普通職員角色的權(quán)限,而不能影響到天庭實(shí)業(yè)
    2006-06-08 23:31 | 綠色使者、綠色心情

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    可以的,這是權(quán)限分離的最基本的要求,各個(gè)實(shí)體(公司,角色,人員)間對(duì)應(yīng)的角色是分立的,無關(guān)的。從權(quán)限設(shè)置上來看:
    組織結(jié)構(gòu)一共有9種操作,其中前面三種不需要資源
    adminRootUnit
    adminRootPerson
    adminRootRole
    adminOrgUnit *
    adminOrgPerson *
    adminOrgRole *
    deleteOrgUnit *
    delteOrgPerson *
    deleteOrgRole *
    打了星號(hào)的操作是需要指定組織資源的,在這里,你可以將其等同于目標(biāo)組織。

    實(shí)際上,復(fù)雜的地方是需要子公司繼承母公司的權(quán)限的時(shí)候,要特別定制,當(dāng)然,由于系統(tǒng)的目標(biāo)是高度可配置,所以這點(diǎn)的代碼非常非常少。
    2006-06-08 23:51 | wolfsquare

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    是不是可以根據(jù)自己的應(yīng)用實(shí)現(xiàn)一個(gè)GUI,類似:暫停服務(wù)-〉修改配置-〉恢復(fù)服務(wù)
    2006-06-11 20:45 | Andy luo

    # re: 不完美的世界-看到了IOC工具的又一個(gè)發(fā)展方向  回復(fù)  更多評(píng)論   

    支持一下....很不錯(cuò)的思路和實(shí)現(xiàn)!
    2007-01-04 11:01 | BeanSoft
    主站蜘蛛池模板: 免费看a级黄色片| 亚洲精品免费视频| 国产aa免费视频| 亚洲AV成人精品日韩一区| 成人免费一区二区无码视频| 亚洲国产成a人v在线| 成人福利免费视频| 亚洲精品456人成在线| 毛片免费在线观看网址| 亚洲午夜无码久久| 国产成人青青热久免费精品| 日韩色日韩视频亚洲网站| 亚洲国产a级视频| 一级一黄在线观看视频免费| 中文字幕亚洲不卡在线亚瑟| 两个人的视频www免费| 亚洲gv猛男gv无码男同短文| 伊人久久免费视频| 亚洲一区无码中文字幕乱码| 大地资源免费更新在线播放| 国产成人+综合亚洲+天堂| 亚洲国产精品丝袜在线观看| 最新亚洲成av人免费看| 日韩精品亚洲人成在线观看| 好先生在线观看免费播放| 免费在线观看亚洲| 亚洲AV无码专区国产乱码4SE| 2021精品国产品免费观看| 亚洲日本在线电影| 亚洲综合精品香蕉久久网| av大片在线无码免费| 久久人午夜亚洲精品无码区| 亚洲线精品一区二区三区| 91高清免费国产自产| 99亚洲男女激情在线观看| 久久亚洲伊人中字综合精品| 毛片a级毛片免费播放下载| 久久久久久国产a免费观看不卡 | 国产精品免费福利久久| 国产成人精品日本亚洲专一区| 亚洲国产成人精品久久久国产成人一区二区三区综|