我的蛋殼

          倡導自由、開放、分享的Java技術社區 http://www.javaread.com

           

          用Architecture Rules檢查代碼越級調用

          在J2EE的軟件架構中,通常會按程序的職責抽象劃分展示層,業務層,持久層,每層都的Java類都組織到例如名為web,service,dao包下。按照設計原則,層與層之間只能單向依賴,且不能跨層以來,例如只能web->service->dao,->表示依賴方向,箭頭指向被依賴一方。Architecture Rules是一個基于JDepend封裝而成小工具,支持通過XML或者變成配置檢查規則,檢查項目代碼的依賴情況。Architecture Rules相對于JDepend的好處是提供了靈活的可配置的檢查規則。 XML配置規則,不用太多解釋也能明白。

          代碼復制到剪貼板

          1.         <architecture>

          2.         

          3.             <configuration>

          4.         

          5.                 <sources no-packages="exception">

          6.                     <source not-found="ignore">core"target"classes</source>

          7.                     <source not-found="ignore">web"target"classes</source>

          8.                     <source not-found="exception">ws"target"classes</source>

          9.                 </sources>

          10.     

          11.             <cyclicalDependency test="true"></cyclicalDependency>

          12.     

          13.         </configuration>

          14.     

          15.         <rules>

          16.     

          17.             <rule id="dao">

          18.                 <comment>

          19.     

          20.                 </comment>

          21.                 <packages>

          22.                     <package>com.company.app.core.dao</package>

          23.                     <package>com.company.app.core.dao.jdbc</package>

          24.                 </packages>

          25.                 <violations>

          26.                     <violation>com.co.app.core.services</violation>

          27.                     <violation>com.co.app.web</violation>

          28.                     <violation>com.co.app.web.spring</violation>

          29.                 </violations>

          30.              </rule>

          31.     

          32.              <rule id="web">

          33.                 <comment>

          34.     

          35.                 </comment>

          36.                 <packages>

          37.                     <package>com.co.app.web</package>

          38.                     <package>com.co.app.web.spring</package>

          39.                     <package>com.co.app.web.decorators</package>

          40.                 </packages>

          41.                 <violations>

          42.                     <violation>com.co.app.core.dao</violation>

          43.                     <violation>com.co.app.core.dao.jdbc</violation>

          44.                     <violation>com.co.app.core.dao.ldap</violation>

          45.                 </violations>

          46.             </rule>

          47.     

          48.         </rules>

          49.     

          50.     </architecture>

          測試并運行。

          代碼復制到剪貼板

          1.         public class SimpleArchitectureTest  

          2.                 extends AbstractArchitectureRulesConfigurationTest {  

          3.           

          4.             /** 

          5.              * @see AbstractArchitectureRulesConfigurationTest 

          6.              */  

          7.             public String getConfigurationFileName() {  

          8.           

          9.                 /** 

          10.              * Provide the name of the rules configuration file. File file is 

          11.              * loaded from the classpath. 

          12.              */  

          13.             return "architecture-rules.xml";  

          14.         }  

          15.       

          16.         /** 

          17.          * @see AbstractArchitectureRulesConfigurationTest#testArchitecture() 

          18.          */  

          19.         public void testArchitecture() {  

          20.       

          21.             /** 

          22.              * Run the test via doTest(). If any rules are broken, or if 

          23.              * the configuration can not be loaded properly, then the appropriate 

          24.              * Exception will be thrown. 

          25.              */  

          26.             assertTrue(doTests());  

          27.         }  

          28.     }  

          編程配置和測試運行。

          代碼復制到剪貼板

          1.         public class SimpleProgrammaticArchitectureTest  

          2.                 extends AbstractArchitectureRulesConfigurationTest {  

          3.           

          4.             /** 

          5.              * Sets up the fixture, for example, open a network connection. This method 

          6.              * is called before a test is executed. 

          7.              */  

          8.             protected void setUp() throws Exception {  

          9.           

          10.             super.setUp();  

          11.       

          12.             /* get the configuration reference */  

          13.             final Configuration configuration = getConfiguration();  

          14.       

          15.             /* add sources */  

          16.             configuration.addSource(  

          17.                     new SourceDirectory("target""test-classes"true));  

          18.       

          19.             /* set options */  

          20.             configuration.setDoCyclicDependencyTest(false);  

          21.             configuration.setThrowExceptionWhenNoPackages(true);  

          22.       

          23.             /* add Rules */  

          24.             final Rule daoRule = new Rule("dao");  

          25.             daoRule.setComment("dao may not access presentation.");  

          26.             daoRule.addPackage("test.com.seventytwomiles.dao.hibernate");  

          27.             daoRule.addViolation("test.com.seventytwomiles.web.spring");  

          28.       

          29.             configuration.addRule(daoRule);  

          30.         }  

          31.       

          32.         /** 

          33.          * @see AbstractArchitectureRulesConfigurationTest#testArchitecture() 

          34.          */  

          35.         public void testArchitecture() {  

          36.       

          37.             /** 

          38.              * Run the test via doTest(). If any rules are broken, or if 

          39.              * the configuration can not be loaded properly, then the appropriate 

          40.              * Exception will be thrown. 

          41.              */  

          42.             assertTrue(doTests());  

          43.         }  

          44.     }  

          Architecture Rules同時對Ant和Maven支持,可以方便集成到項目的編譯和測試環境中。

          更多信息:
          簡約之美,JQuery之進度條插件
          讓開發文檔自動化

          本文作者 javaread.com



          本文作者:javaread.com

          posted on 2008-07-09 14:17 javaread.com 閱讀(1093) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆檔案

          Java

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南木林县| 宜兰市| 同仁县| 乌海市| 西和县| 习水县| 牙克石市| 湖北省| 酒泉市| 新民市| 九江县| 武定县| 咸阳市| 合山市| 柘荣县| 遂宁市| 顺昌县| 樟树市| 平潭县| 乌拉特中旗| 沅江市| 浦城县| 尚义县| 崇文区| 乌兰浩特市| 湖北省| 琼结县| 洪江市| 壶关县| 昂仁县| 浙江省| 宝坻区| 盐亭县| 阜康市| 石景山区| 登封市| 延川县| 新闻| 满洲里市| 许昌县| 洪雅县|