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

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

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

    limq

    rainman
    隨筆 - 19, 文章 - 2, 評論 - 115, 引用 - 1
    數據加載中……

    重構—利用反射合并函數

        先看下重構前的測試用例:


    public class TestLogin extends TestCase{
        
    private ButtonManagerIbatis buttonManagerIbatis;
        
          
    protected  void setUp() throws Exception 
                context 
    = getContext(); 
                buttonManagerIbatis 
    = (ButtonManagerIbatis)context.getBean("buttonManagerIbatis");
                
    super.setUp(); 
            }
     
            ApplicationContext context ;
            
    protected ApplicationContext getContext() {    
                 String[] paths 
    = {"/context/application_context.xml"};
                 ApplicationContext   ctx 
    = new ClassPathXmlApplicationContext(paths);
                 
    return ctx;
            }

        
        
    /**
         * 測試:登陸后讀取權限信息,并且封裝為樹形結構 
         
    */

          
    public void testLongin(){
              List
    <Button> list = buttonManagerIbatis.getAuth("0000");
              testall(list);
              
          }

            Map
    <String,Model> modelmap = new HashMap<String,Model>();
            Map
    <String,Menu>  fmenumap = new HashMap<String,Menu>();
            Map
    <String,Menu>  smenumap =  new HashMap<String,Menu>();
            
            
    public void testall(List<Button> buttonList){
                
    for(Button button :buttonList){
                    test(modelmap,button);
                }

                
    for(Model model : modelmap.values()){
                    test2(smenumap,model);
                }

                
    for(Menu menu : smenumap.values()){
                    test3(fmenumap,menu);
                }

                
    for(Menu fmenu :fmenumap.values() ){
                    System.out.println(fmenu.getMenuName());
                    
    for(Menu smenu :fmenu.getMenus() ){
                        System.out.println(
    "  "+smenu.getMenuName());
                        
    for(Model model : smenu.getModels()){
                            System.out.println(
    "    "+model.getName());
                            
    for(Button b:model.getButtons()){
                                System.out.println(
    "      "+ b.getButtonDesc());
                            }

                        }

                    }

                }

            }


            
    public void test(Map<String,Model> modelmap , Button b){
                Model m 
    = b.getModel();
                
    if(!modelmap.containsKey(m.getId()))
                    modelmap.put(m.getId(),m);
                modelmap.get(m.getId()).getButtons().add(b);
            }

            
            
    public void test2(Map<String,Menu> menumap , Model m){
                Menu menu 
    = m.getMenu();
                
    if(!menumap.containsKey(menu.getId()))
                    menumap.put(menu.getId(),menu);
                menumap.get(menu.getId()).getModels().add(m);
                    
            }

            
            
    public void test3(Map<String,Menu> menumap , Menu smenu){
                Menu fmenu 
    = smenu.getMenu();
                
    if(!menumap.containsKey(fmenu.getId()))
                    menumap.put(fmenu.getId(),fmenu);
                menumap.get(fmenu.getId()).getMenus().add(smenu);
            }

            
    }

        這里有3個方法 test, test2 ,test3 考慮到以后還可能有變化,所以想把他們合成一個方法,首先考慮到了反射

            public void testC(Map map , Object t , String parent ,String childrenname){
                
    try {
                    Object t_parent 
    = BeanUtils.getDeclaredProperty(t, parent);
                    Object t_parent_id 
    = BeanUtils.getDeclaredProperty(t_parent, "id");
                    
    if(!map.containsKey(t_parent_id)){
                        map.put(t_parent_id, t_parent);
                    }

                    Object o 
    = map.get(t_parent_id);
                    Collection t_collection 
    =(Collection)BeanUtils.getDeclaredProperty(o, childrenname);
                    t_collection.add(t);
                }
     catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
     catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }

            }
    于是修改后的測試用例為:

    public class TestLogin extends TestCase{
        
    private ButtonManagerIbatis buttonManagerIbatis;
        
          
    protected  void setUp() throws Exception 
                context 
    = getContext(); 
                buttonManagerIbatis 
    = (ButtonManagerIbatis)context.getBean("buttonManagerIbatis");
                
    super.setUp(); 
            }
     
            ApplicationContext context ;
            
    protected ApplicationContext getContext() {    
                 String[] paths 
    = {"/context/application_context.xml"};
                 ApplicationContext   ctx 
    = new ClassPathXmlApplicationContext(paths);
                 
    return ctx;
            }

          
    public void testLongin(){
              List
    <Button> list = buttonManagerIbatis.getAuth("0000");
              testall(list);
              
          }

              Map
    <String,Model> modelmap = new HashMap<String,Model>();
              Map
    <String,Menu>  fmenumap = new HashMap<String,Menu>();
              Map
    <String,Menu>  smenumap =  new HashMap<String,Menu>();
            
            
    public void testall(List<Button> buttonList){
                
    for(Button button :buttonList){
                    testC(modelmap,button,
    "model","buttons");
                }

                
                
    for(Model model : modelmap.values()){
                    testC(smenumap,model,
    "menu","models");
                }

                
    for(Menu menu : smenumap.values()){
                    testC(fmenumap,menu,
    "menu","menus");
                }

                
                
    for(Menu fmenu :fmenumap.values() ){
                    System.out.println(fmenu.getMenuName());
                    
    for(Menu smenu :fmenu.getMenus() ){
                        System.out.println(
    "  "+smenu.getMenuName());
                        
    for(Model model : smenu.getModels()){
                            System.out.println(
    "    "+model.getName());
                            
    for(Button b:model.getButtons()){
                                System.out.println(
    "      "+ b.getButtonDesc());
                            }

                        }

                    }

                }

            }

            
    /**
             * 
             * 
    @param map 
             * 
    @param b
             
    */

            @SuppressWarnings(
    "unchecked")
            
    public void testC(Map map , Object t , String parent ,String childrenname){
                
    try {
                    Object t_parent 
    = BeanUtils.getDeclaredProperty(t, parent);
                    Object t_parent_id 
    = BeanUtils.getDeclaredProperty(t_parent, "id");
                    
    if(!map.containsKey(t_parent_id)){
                        map.put(t_parent_id, t_parent);
                    }

                    Object o 
    = map.get(t_parent_id);
                    Collection t_collection 
    =(Collection)BeanUtils.getDeclaredProperty(o, childrenname);
                    t_collection.add(t);
                }
     catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
     catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }

            }

            
    }
    例外 BeanUtils中的 反射方法:
    static public Object getDeclaredProperty(Object object, String propertyName) throws IllegalAccessException, NoSuchFieldException {
            Assert.notNull(object);
            Assert.hasText(propertyName);
            Field field 
    = object.getClass().getDeclaredField(propertyName);
            
    return getDeclaredProperty(object, field);
        }

    posted on 2009-02-17 09:49 limq 閱讀(3087) 評論(1)  編輯  收藏

    評論

    # re: 重構—利用反射合并函數  回復  更多評論   

    反射在性能方面估計不是很滿意
    2009-07-05 18:35 | 冰河快狼

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品视频免费| 久久亚洲AV无码西西人体| 亚洲XX00视频| 国产精品亚洲综合五月天| 中文字幕在线成人免费看| 免费涩涩在线视频网| 亚洲大香人伊一本线| 久久福利青草精品资源站免费| 亚洲AV伊人久久青青草原| 久久国产免费一区二区三区| 中文字幕亚洲乱码熟女一区二区| 一级做a爰性色毛片免费| 四虎永久免费地址在线网站| 青青青亚洲精品国产| 国产精品高清全国免费观看| 亚洲欧美自偷自拍另类视| 福利免费观看午夜体检区| 亚洲精品人成电影网| 国产精品怡红院永久免费| 亚洲卡一卡2卡三卡4卡无卡三| 中文字幕免费视频精品一| 7777久久亚洲中文字幕| 国产亚洲真人做受在线观看| 日韩精品免费在线视频| 亚洲av无码一区二区三区天堂| 好爽又高潮了毛片免费下载| 亚洲人成未满十八禁网站| 亚洲av无码av制服另类专区| 97在线视频免费播放| 亚洲导航深夜福利| 亚洲熟妇无码乱子AV电影| 无码专区AAAAAA免费视频| 亚洲国产精品网站久久| 亚洲最大激情中文字幕| 国产片免费在线观看| 国产成在线观看免费视频| 久久午夜免费鲁丝片| 久久久受www免费人成| 亚洲成人在线电影| 成人激情免费视频| 中文字幕成人免费高清在线视频|