Changes between Initial Version and Version 1 of codekata/refactor3


Ignore:
Timestamp:
11/25/2013 11:34:28 AM (12 years ago)
Author:
zhangyihui
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • codekata/refactor3

    v1 v1  
     1'''2013年10月11日和2013年10月18日代码道场活动纪实'''[[BR]] 
     2'''代码道场的参与者:'''李峰,秦鸿源,张艺辉,陈阳,丁健勇,李炳岳,黄志强,李剑文,江毅超,刘必晓[[BR]] 
     3'''地点:'''4G会议室[[BR]] 
     4本期代码道场题目,依旧是上期代码题目,因为上期重构的方法,我们还可以重构得更好,并且有了上两期讨论的积累,对本期代码[[BR]] 
     5道场活动也起到一定的作用。[[BR]] 
     6上一期的代码道场活动的代码:[wiki:codekata/refactor2 2013-10-04 Functions类htmlUrl方法重构2 活动][[BR]] 
     7这次我们是整组人一起讨论如何更好地重构htmlUrl方法,每个人都会提出自己的观点,想法以及给大家分析为什么要这样重构方法。[[BR]] 
     8当然,让我们先来看下代码[[BR]] 
     9 
     10''版块对象'' 
     11[[BR]] 
     12 
     13{{{ 
     14/** 
     15 * 版块对象 
     16 */ 
     17public class Forum { 
     18        private long fid; 
     19 
     20        public long getFid() { 
     21                return fid; 
     22        } 
     23 
     24        public void setFid(long fid) { 
     25                this.fid = fid; 
     26        } 
     27         
     28        public String getRedirectUrl(){ 
     29                return ""; 
     30        } 
     31} 
     32}}} 
     33 
     34''发帖''[[BR]] 
     35 
     36{{{ 
     37public class Post { 
     38        public long getPid(){ 
     39                return 2424242; 
     40        } 
     41        public long getTid(){ 
     42                return 789789; 
     43        } 
     44 
     45} 
     46}}} 
     47 
     48''帖子''[[BR]] 
     49 
     50{{{ 
     51public class Topic { 
     52        public long getTid(){ 
     53                return 1342; 
     54        } 
     55} 
     56}}} 
     57 
     58''用户''[[BR]] 
     59 
     60{{{ 
     61public class User { 
     62        public long getUid(){ 
     63                return 2424; 
     64        } 
     65} 
     66}}} 
     67 
     68当然了,这个时候就少不了测试类了[[BR]] 
     69 
     70{{{ 
     71import junit.framework.Assert; 
     72 
     73import org.junit.Before; 
     74import org.junit.Ignore; 
     75import org.junit.Test; 
     76 
     77public class FunctionsTest { 
     78 
     79        private String appName = null; 
     80        private String itAppName = null; 
     81        private String rootUrl = null; 
     82        private String ucRoot = null; 
     83        private Topic topic = null; 
     84        private Forum forum = null; 
     85        private Post post = null; 
     86        private User user = null; 
     87 
     88        @Before 
     89        public void setUp() { 
     90                appName = "pcauto"; 
     91                itAppName = "itbbs"; 
     92                rootUrl = "http://bbs.pcauto.com.cn"; 
     93                ucRoot = "http://my.pcauto.com.cn"; 
     94                topic = new Topic(); 
     95                forum = new Forum(); 
     96                post = new Post(); 
     97                user = new User(); 
     98                forum.setFid(123L); 
     99        } 
     100 
     101        @Ignore 
     102        public void testHtmlUrl() { 
     103                // 变化的对象 Object,rootUrl,appName, 
     104                // Object是变化的,rootUrl,appName=auto 是固定的 
     105                Assert.assertEquals(rootUrl + "/topic-1342.html", 
     106                                Functions.htmlUrl(topic)); 
     107                Assert.assertEquals(rootUrl + "/404.html", 
     108                                Functions.htmlUrl((Topic) null)); 
     109                Assert.assertEquals(rootUrl + "/forum-123.html", 
     110                                Functions.htmlUrl(forum)); 
     111                Assert.assertEquals(rootUrl + "/post-789789_2424242.html", 
     112                                Functions.htmlUrl(post)); 
     113                Assert.assertEquals(ucRoot + "/2424", 
     114                                Functions.htmlUrl(user)); 
     115                Assert.assertEquals("1234567", 
     116                                Functions.htmlUrl("1234567")); 
     117 
     118        } 
     119 
     120        @Test 
     121        public void testHtmlUrlForum() { 
     122                Assert.assertEquals(rootUrl + "/forum-123.html", 
     123                                Functions.htmlUrl(forum)); 
     124                 
     125//              Assert.assertEquals(rootUrl + "/f123.html", 
     126//                              Functions.htmlUrl(forum, rootUrl, itAppName)); 
     127 
     128                Assert.assertEquals(rootUrl + "/404.html", 
     129                                Functions.htmlUrl((Forum) null)); 
     130 
     131        } 
     132 
     133        @Test 
     134        public void testHtmlUrlTopic() { 
     135                Assert.assertEquals(rootUrl + "/topic-1342.html", 
     136                                Functions.htmlUrl(topic)); 
     137 
     138//              Assert.assertEquals(rootUrl + "/1342.html", 
     139//                              Functions.htmlUrl(topic, rootUrl, itAppName)); 
     140                 
     141                Assert.assertEquals(rootUrl + "/404.html", 
     142                                Functions.htmlUrl((Topic) null)); 
     143        } 
     144 
     145        @Test 
     146        public void testHtmlUrlUser() { 
     147                Assert.assertEquals(ucRoot + "/2424/", 
     148                                Functions.htmlUrl(user)); 
     149                 
     150//              Assert.assertEquals(rootUrl + "/123.html", 
     151//                              Functions.htmlUrl(user, ucRoot, itAppName)); 
     152 
     153                Assert.assertEquals(rootUrl + "/404.html", 
     154                                Functions.htmlUrl((User) null)); 
     155        } 
     156 
     157        @Test 
     158        public void testHtmlUrlPost() { 
     159                Assert.assertEquals(rootUrl + "/post-789789_2424242.html", 
     160                                Functions.htmlUrl(post)); 
     161                 
     162//              Assert.assertEquals(rootUrl + "/p789789_2424242.html", 
     163//                              Functions.htmlUrl(post, rootUrl, itAppName)); 
     164 
     165                Assert.assertEquals(rootUrl + "/404.html", 
     166                                Functions.htmlUrl((Post) null)); 
     167        } 
     168 
     169        @Test 
     170        public void testHtmlUrlString() { 
     171                Assert.assertEquals("123456", 
     172                                Functions.htmlUrl("123456")); 
     173                 
     174//              Assert.assertEquals("123456", 
     175//                              Functions.htmlUrl("123456", rootUrl, itAppName)); 
     176 
     177                Assert.assertEquals(rootUrl + "/404.html", 
     178                                Functions.htmlUrl((String) null)); 
     179        } 
     180         
     181         
     182         
     183         
     184 
     185} 
     186}}} 
     187 
     188好不容易啊,终于可以写实现方法了。其实同事们都是喜欢写实现方法多于写测试方法的,但工作不是喜欢就行得了,[[BR]] 
     189还要考虑很多因素,最根本的,写出来的实现方法必须得通过严格的测试,并且提交代码之前,我们也得测试代码,[[BR]] 
     190从而促使我们使用测试驱动开发的方法进行开发。闲话也少说了,下面看下实现代码吧[[BR]] 
     191 
     192{{{ 
     193import java.text.MessageFormat; 
     194 
     195public class Functions{ 
     196        private static String  rootUrl = "http://bbs.pcauto.com.cn"; 
     197        private static String  appName = "pcauto"; 
     198    /** 
     199     * 
     200     * 将页面链接静态化(wap),目前只支持Forum,Topic,Post,User对象,其他的如果是字符串则返回原字符串 
     201     * <br/>修改些方法的规则的同时也要修改parserUrl方法 
     202     * tid等于{4018911,4027940, 4040395}销售配合,此帖子跳转到指定链接 
     203     * 
     204     * @param object 
     205     *  
     206     *  
     207     * @param type 1:web, 2:wap 
     208     * @return 
     209     */ 
     210    public static String htmlUrl(Object object, int type) { 
     211                boolean isIt = false;  
     212                if (isIt && type != SystemConstant.TYPE_WAP ) { 
     213                        return "";  
     214                } else { 
     215 
     216                switch (type) { 
     217                    case SystemConstant.TYPE_WEB: 
     218                        rootUrl = rootUrl; 
     219                        break; 
     220                    case SystemConstant.TYPE_WAP: 
     221                        rootUrl = rootUrl;  
     222                        break; 
     223                    default: 
     224                        break; 
     225                } 
     226 
     227                if ("".equals(rootUrl) || rootUrl == null) { 
     228                    return ""; 
     229                } 
     230 
     231                if (object instanceof Forum) { 
     232                    Forum forum = (Forum) object; 
     233                    if (!isEmpty(forum.getRedirectUrl()) && SystemConstant.TYPE_WEB == type) { 
     234                        return forum.getRedirectUrl(); 
     235                    } else { 
     236                        return rootUrl + "/forum-" + forum.getFid() + ".html"; 
     237                    } 
     238                } else if (object instanceof Topic) { 
     239                        //销售配合,此帖子跳转到指定链接 
     240                        if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4018911){ 
     241                                return "http://ad.doubleclick.net/clk;275446626;102403463;a?http://bbs.pcauto.com.cn/topic-4018911.html"; 
     242                        } 
     243                        if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4027940){ 
     244                                return "http://ad.doubleclick.net/clk;275446638;102403466;g?http://bbs.pcauto.com.cn/topic-4027940.html"; 
     245                        } 
     246                        if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4040395){ 
     247                                return "http://ad.doubleclick.net/clk;275446642;102403468;d?http://bbs.pcauto.com.cn/topic-4040395.html"; 
     248                        } 
     249                    return rootUrl + "/topic-" + ((Topic) object).getTid() + ".html"; 
     250                } else if (object instanceof Post) { 
     251                    return rootUrl + "/post-" + ((Post) object).getTid() + '_' + ((Post) object).getPid() + ".html"; 
     252                } else if (object instanceof String) { 
     253                    return (String) object; 
     254                } else if (object instanceof User) { 
     255                    return  "/" + ((User) object).getUid(); 
     256                } else if (object instanceof ftree.Forum) { 
     257                    ftree.Forum forum = (ftree.Forum) object; 
     258                    return rootUrl + "/forum-" + forum.getFid() + ".html"; 
     259                } else { 
     260                    return ""; 
     261                } 
     262                } 
     263    } 
     264     
     265    public static boolean isEmpty(String text){ 
     266         return (null == text || "".equals(text)); 
     267    } 
     268     
     269    
     270    /** 
     271     * 板块URL静态化  
     272     * @param forum 板块 
     273     * @param rootUrl 应用路径 
     274     * @param appName 
     275     * @return 
     276     */ 
     277    public static String htmlUrl(Forum forum) { 
     278        if (forum == null) { 
     279                return Tpl.NOT_FOUND_URL; 
     280        } 
     281//      if ("itbbs".equals(appName)) { 
     282//              return rootUrl + "/f" + forum.getFid() + ".html"; 
     283//      } else { 
     284//              return rootUrl + "/forum-" + forum.getFid() + ".html"; 
     285//      } 
     286         
     287        return MessageFormat.format(Tpl.FORUM_URL, String.valueOf(forum.getFid())); 
     288         
     289    } 
     290     
     291    /** 
     292     * 主题URL静态化  
     293     * @param topic  主题  
     294     * @param rootUrl 应用路径 
     295     * @param appName 
     296     * @return 
     297     */ 
     298    public static String htmlUrl(Topic topic) { 
     299        if (topic == null) { 
     300                return Tpl.NOT_FOUND_URL; 
     301        } 
     302//      if ("itbbs".equals(appName)) { 
     303//              return rootUrl + "/" + topic.getTid() + ".html"; 
     304//      } else { 
     305//              return rootUrl + "/topic-" + topic.getTid() + ".html"; 
     306//      } 
     307         
     308        return MessageFormat.format(Tpl.TOPIC_URL, String.valueOf(topic.getTid())); 
     309                         
     310                         
     311         
     312    } 
     313     
     314     
     315    /** 
     316     * 帖子URL静态化  
     317     * @param post 帖子  
     318     * @param rootUrl 应用路径 
     319     * @param appName 
     320     * @return 
     321     */ 
     322     
     323    public static String htmlUrl(Post post) { 
     324         
     325        if (post == null) { 
     326                return Tpl.NOT_FOUND_URL; 
     327        } 
     328        String pid = String.valueOf(post.getPid()); 
     329        String tid = String.valueOf(post.getTid()); 
     330        return MessageFormat.format(Tpl.POST_URL, new Object[]{tid, pid}); 
     331    } 
     332     
     333     
     334    /** 
     335     * 用户URL静态化  
     336     * @param post 帖子  
     337     * @param rootUrl 应用路径 
     338     * @param appName 
     339     * @return 
     340     */ 
     341    public static String htmlUrl(User user) { 
     342        if (user == null) { 
     343                return Tpl.NOT_FOUND_URL; 
     344        } 
     345        return MessageFormat.format(Tpl.USER_URL, String.valueOf(user.getUid())); 
     346    } 
     347     
     348    /** 
     349     * URL静态化  
     350     * @param str string  
     351     * @param rootUrl 应用路径 
     352     * @param appName 
     353     * @return 
     354     */ 
     355    public static String htmlUrl(String str) { 
     356        if (str == null) { 
     357                return Tpl.NOT_FOUND_URL; 
     358        } 
     359        return str; 
     360    } 
     361     
     362    /** 
     363     * wap版版块URL静态化  
     364     * @param forum 版块 
     365     * @param rootUrl 应用路径 
     366     * @param appName 
     367     * @return 
     368     */ 
     369    public static String htmlUrl4Wap(Forum forum) { 
     370         
     371        return ""; 
     372    } 
     373     
     374    /** 
     375     * wap版帖子URL静态化  
     376     * @param post 帖子  
     377     * @param rootUrl 应用路径 
     378     * @param appName 
     379     * @return 
     380     */ 
     381    public static String htmlUrl4Wap(Post post) { 
     382         
     383        return ""; 
     384    } 
     385     
     386    /** 
     387     * wap版主题URL静态化  
     388     * @param topic 主题 
     389     * @param rootUrl 应用路径 
     390     * @param appName 
     391     * @return 
     392     */ 
     393    public static String htmlUrl4Wap(Topic topic) { 
     394         
     395        return ""; 
     396    } 
     397     
     398    /** 
     399     * wap版字符串URL静态化  
     400     * @param str string 
     401     * @param rootUrl 应用路径 
     402     * @param appName 
     403     * @return 
     404     */ 
     405    public static String htmlUrl4Wap(String str) { 
     406         
     407        return ""; 
     408    } 
     409     
     410    /** 
     411     * wap版用户URL静态化  
     412     * @param user 用户  
     413     * @param rootUrl 应用路径 
     414     * @param appName 
     415     * @return 
     416     */ 
     417    public static String htmlUrl4Wap(User user) { 
     418         
     419        return ""; 
     420    } 
     421     
     422     
     423} 
     424 
     425}}} 
     426 
     427每一期的代码道场活动,同事们都是快速思考问题的,并且根据对方提出的方案提出自己的疑问,同时对方也必须进行快速思考回答,没错,[[BR]] 
     428是快速思考,练的就是快速思考问题的习惯,当这习惯一旦养成,对以后的工作,必定起着致关重要的作用,再加上这两期的题目都是与工作[[BR]] 
     429相关的,现在研究透彻,那对于工作只会有益而无害的,并且还能学习到其他同事不同的想法,知识面不停地在扩张,真的是一举多得![[BR]] 
     430本期代码道场报道到此为止,欢迎同事们发表自己的想法,丰富这文档。