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

          2006年5月17日

          小經(jīng)驗(yàn)兩則

          1.Oracle 8i 下使用最新的oracle thin driver時(shí)用DatabaseMetaData獲取主鍵等信息時(shí),需要將
          connection.getMetaData().getPrimaryKeys(connection.getCatalog(),null,tableName);
          中的tableName轉(zhuǎn)為大寫,否則無(wú)法得到數(shù)據(jù)。

          2.正則表達(dá)式中,需要以","分割字符串,但是要分割的字串中含有","號(hào),為了避免沖突,引入前置轉(zhuǎn)義字符"\",這樣的正則怎么寫呢?
          例如:
          String txt = "STATE_COUNTY=kj\\\\,,ADDR_LINE1=l=j,ADDR_LINE2=mj\n\n,ADDR_LINE3=n\\,o,\n\nADDR_LINE4=\np";
          需要把鍵值對(duì)切分出來(lái):
          ?Pattern.compile("[^\\\\],)");
          這個(gè)是不行的,會(huì)將","號(hào)前一個(gè)字符消耗掉。

          ?Pattern.compile("(?![\\\\]),)");
          也不行
          Pattern?p?=?Pattern.compile,",(?![\\\\])");
          倒是可以,但是把轉(zhuǎn)義字符放后面似乎有點(diǎn)詭異。
          找了一個(gè)折衷辦法,不切割使用正則獲取"鍵=值"子串:
          Pattern?p?=?Pattern.compile("\\w+\\s*=.*?[,]*.*?(?=,|$)",Pattern.DOTALL);
          但是還是帶來(lái)了子串中不能含有"="的問(wèn)題。
          最后查了一個(gè)JDK1.4 DOC,發(fā)現(xiàn)了一個(gè)反向的非匹配串寫法:
          Pattern?p?=?Pattern.compile("(?<!\\\\),\\s*");
          這樣一來(lái)就解決了以上問(wèn)題。

          posted @ 2006-08-03 09:54 wolfsquare 閱讀(563) | 評(píng)論 (0)編輯 收藏

          回復(fù) 亂彈權(quán)限系統(tǒng)續(xù)一

          亂彈權(quán)限系統(tǒng)續(xù)一
          原文在這:http://www.aygfsteel.com/RongHao/archive/2006/07/03/56258.html

          仔細(xì)分析一,二,三,四權(quán)限背后的實(shí)質(zhì)可以發(fā)現(xiàn):
          一系統(tǒng)權(quán)限的概念有一些冗余,很難想象這樣一種情況:你已經(jīng)有了子系統(tǒng)下的很多權(quán)限,結(jié)果因?yàn)闆](méi)有模塊權(quán)限而使得無(wú)法使用該模塊進(jìn)行任何操作,分配權(quán)限的人要非常小心才行.這個(gè)世界已經(jīng)夠復(fù)雜了,不要再給開發(fā),部署人員增加復(fù)雜度了.很明白的,這個(gè)權(quán)限是不需要資源的權(quán)限
          二數(shù)據(jù)庫(kù)操作權(quán)限的概念,有一點(diǎn)疑惑,不知道為什么要建立這樣的一個(gè)概念,和行級(jí)權(quán)限有什么區(qū)別呢? 從你的上下文理解來(lái)看,似乎是這樣子的:有操作X表的業(yè)務(wù),如果用戶有增加權(quán)限,則可以任意增加數(shù)據(jù),如果用戶有編輯權(quán)限,則可以編輯任意數(shù)據(jù).實(shí)際上對(duì)應(yīng)標(biāo)準(zhǔn)權(quán)限模型為:不需要限定資源的操作,即不需要資源標(biāo)識(shí)的權(quán)限.
          三行級(jí)數(shù)據(jù)權(quán)限,這個(gè)概念很直白,對(duì)應(yīng)標(biāo)準(zhǔn)權(quán)限模型就是: 資源(行數(shù)據(jù))+操作
          四列級(jí)數(shù)據(jù)權(quán)限,由于不是針對(duì)某特定行數(shù)據(jù),所以它也是無(wú)資源型權(quán)限
          就這樣,所有的權(quán)限最終可劃為需要資源標(biāo)識(shí)和不需要資源標(biāo)識(shí),換句話說(shuō),所有權(quán)限可劃分為控制某些集合的權(quán)限和控制單體的權(quán)限兩種,在某些時(shí)候,也稱之為 功能權(quán)限和數(shù)據(jù)權(quán)限


          談到把權(quán)限分給別人,很自然的就是如何控制權(quán)限的權(quán)限的問(wèn)題了,很拗口,是吧?仔細(xì)想想,這樣很直觀,也沒(méi)有什么后遺癥,權(quán)限自遞歸控制和自解釋,真是一個(gè)完美的循環(huán).
          有愛思考的同學(xué)想深了,會(huì)覺(jué)得非常麻煩,難實(shí)現(xiàn).當(dāng)然,概念上一回事,具體實(shí)現(xiàn)上可以是另一回事,可以做很多的變通來(lái)達(dá)到目的.只要保持概念上的簡(jiǎn)單性,就足以使得非常多的人得以解脫了。

          另外,作為架構(gòu)設(shè)計(jì)者,非常非常不贊成動(dòng)輒就把很底層的概念扯進(jìn)高層設(shè)計(jì)中(例如行級(jí),數(shù)據(jù)庫(kù)什么的),很容易把自己和別人搞胡涂。
          可以最近狀態(tài)不好,要不好好blog一篇,8過(guò),有句話怎么說(shuō)來(lái)著:“都素那浮云而已。。。”

          posted @ 2006-07-04 22:45 wolfsquare 閱讀(1948) | 評(píng)論 (1)編輯 收藏

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

               摘要: 在本篇文章中,作者在一個(gè)系統(tǒng)的構(gòu)建中深度地被各種配置邏輯所困擾,由此發(fā)現(xiàn)了IOC工具(如Spring,Nuts等)的又一個(gè)發(fā)展方向。  閱讀全文

          posted @ 2006-06-08 00:30 wolfsquare 閱讀(1951) | 評(píng)論 (7)編輯 收藏

          結(jié)合WebWork實(shí)現(xiàn)高復(fù)用度系統(tǒng)的探索(上)

          需求: 某機(jī)構(gòu)體系下,機(jī)構(gòu)類型分為子公司,部門,人員等,以后可能在某機(jī)構(gòu)或者其子孫機(jī)構(gòu)下可能會(huì)再分出其他子機(jī)構(gòu)類型,希望在增加新類型過(guò)程中,盡可能的避免修改已有代碼。

          情況:子公司,部分,人員等已完成所有編碼(界面,商業(yè)邏輯,數(shù)據(jù)邏輯)
          變化:需要把這個(gè)機(jī)構(gòu)體系組成為一顆樹狀結(jié)構(gòu)
          策略:鑒于除了樹結(jié)構(gòu)外的其他部分代碼已經(jīng)完成,那么應(yīng)該首先保持這些代碼不予改動(dòng)。復(fù)用修改的優(yōu)先級(jí)從高到低的順序如下:
          ? 界面×JSP,Action層
          ? 商業(yè)邏輯 Service層
          ? 數(shù)據(jù)邏輯層
          ? 數(shù)據(jù)物理層
          有經(jīng)驗(yàn)的人知道,大部分情況下,越是下層的改動(dòng),越是影響越廣泛(注意不是修改難度),所以我們只有在無(wú)計(jì)可施的情況下,才進(jìn)行低層的修改。

          分析: 回到我們的需求,從功能上看,維護(hù)一個(gè)組織機(jī)構(gòu)的需求,已經(jīng)涵蓋了每一個(gè)子結(jié)構(gòu)的維護(hù)需求,以部門的建立為例,在新建一個(gè)部門時(shí),同時(shí)也必須建立機(jī)構(gòu)樹上的節(jié)點(diǎn),
          ?這樣,如果需要直接使用原有的創(chuàng)建部門的所有代碼,需要在其上加上創(chuàng)建組織機(jī)構(gòu)所需要的父節(jié)點(diǎn),以及當(dāng)前節(jié)點(diǎn)名稱信息(在這里department的增加界 面JSP是需要修改的,不過(guò)實(shí)際上我沒(méi)有修改該文件,而是利用DHTML來(lái)動(dòng)態(tài)加入需要新增加的信息),然后提交給原創(chuàng)建部門的URI (departmentSave.action)和組織機(jī)構(gòu)創(chuàng)建URI(orgCreate.action),在這里我們利用ww提供的action chain功能來(lái)完成這兩個(gè)操作。
          ?這里需要修改department.action的配置,攔截save方法使其執(zhí)行完后跳過(guò)原來(lái)的relist結(jié)果頁(yè)面轉(zhuǎn)向組織結(jié)構(gòu)的創(chuàng)建orgCreate.action:
          ?<action name="unitSave" class="com.wolfsquare.ibase.org.action.UnitAction" method="save">
          ?? <result name="input">/org/unit/input.jsp</result>
          ?? <result name="relist" type="chain">
          ?????? <param name="actionName">orgCreate</param>
          ??????????????? <param name="namespace">/org</param>??
          ??????????? </result>
          ?? <result name="xxx" type="redirect">/org/unit.action?start=${start}</result>
          ?? <interceptor-ref name="validationStack"/>
          ? </action>
          可能有同學(xué)看到這里會(huì)問(wèn):創(chuàng)建組織節(jié)點(diǎn)時(shí)應(yīng)該還需要關(guān)聯(lián)前面創(chuàng)建的部門對(duì)象啊,這個(gè)操作是如何實(shí)現(xiàn)的?信息是如何傳遞的?
          在這里,由于整個(gè)架構(gòu)體系并沒(méi)有支持這種信息傳遞的功能,所以只好以一種比較”臟“的方式實(shí)現(xiàn):
          ??????? 在department.action類里增加了一個(gè)方法getModel()返回剛剛創(chuàng)建的部門對(duì)象,然后在org.action類中增加一個(gè)接收的方法setModel(object o)這樣在整action chain執(zhí)行的時(shí)候,ww會(huì)自動(dòng)將getModel后的數(shù)據(jù)填入setModel中,這樣做的后果是以后增加新的機(jī)構(gòu)類型的功能時(shí),action必須也照這樣的語(yǔ)意設(shè)置getModel方法。(如果要解決這個(gè)問(wèn)題,這能需要使用一個(gè)特定的Context,然后攔截指定Service的創(chuàng)建方法,把創(chuàng)建結(jié)果放入Context,不過(guò)這又帶來(lái)如何清除Context的問(wèn)題,于是又要求助與ww的interspector,專門寫一個(gè)攔截器來(lái)擦屁股,夠麻煩。。。)

          ??????? 就這樣,我們完成了新增,修改組織機(jī)構(gòu)的功能合成,雖然有點(diǎn)拖沓,但是還是達(dá)到了復(fù)用,少修改原有代碼,而且擴(kuò)展性也很好的目標(biāo)。這上篇說(shuō)的是兩個(gè)簡(jiǎn)單業(yè)務(wù)的功能揉合問(wèn)題,下篇我們來(lái)看看稍微復(fù)雜點(diǎn)的情況,看看還能不能繼續(xù)依葫蘆畫瓢來(lái)完成功能合的成
          ??
          (未完待續(xù))??

          posted @ 2006-05-17 23:40 wolfsquare 閱讀(1232) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 济源市| 毕节市| 博乐市| 岳池县| 浦城县| 自治县| 庆城县| 英德市| 东兴市| 维西| 依兰县| 任丘市| 黑山县| 桃源县| 麻江县| 鄢陵县| 南阳市| 鲜城| 恩施市| 拜泉县| 清水河县| 深水埗区| 益阳市| 苗栗市| 日照市| 庆阳市| 双辽市| 日喀则市| 苏尼特左旗| 茌平县| 清原| 吉安县| 淮阳县| 通渭县| 遵化市| 巴彦县| 龙泉市| 鄂托克前旗| 即墨市| 武汉市| 永康市|