'''2013年9月27日代码道场活动纪实'''[[BR]] '''代码道场的参与者:'''秦鸿源,陈阳,王安宁,丁健勇,李炳岳,黄志强,李剑文,张艺辉,江毅超, 刘必晓, 李峰[[BR]] '''地点:'''4G会议室[[BR]] 本次代码道场的题目,希望与实际工作有一定的'''联系''',从而能激发大家的热情,所以这期代码道场的题目为'''论坛系统'''其中一个'''方法的重构'''[[BR]] '''题目'''如下: 重构如下代码:[[BR]] {{{ public static String htmlUrl(Object object, int type) { boolean isIt = false; if (isIt && type != SystemConstant.TYPE_WAP ) { return ""; } else { switch (type) { case SystemConstant.TYPE_WEB: rootUrl = rootUrl; break; case SystemConstant.TYPE_WAP: rootUrl = rootUrl; break; default: break; } if ("".equals(rootUrl) || rootUrl == null) { return ""; } if (object instanceof Forum) { Forum forum = (Forum) object; if (!isEmpty(forum.getRedirectUrl()) && SystemConstant.TYPE_WEB == type) { return forum.getRedirectUrl(); } else { return rootUrl + "/forum-" + forum.getFid() + ".html"; } } else if (object instanceof Topic) { //销售配合,此帖子跳转到指定链接 if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4018911){ return "http://ad.doubleclick.net/clk;275446626;102403463;a?http://bbs.pcauto.com.cn/topic-4018911.html"; } if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4027940){ return "http://ad.doubleclick.net/clk;275446638;102403466;g?http://bbs.pcauto.com.cn/topic-4027940.html"; } if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4040395){ return "http://ad.doubleclick.net/clk;275446642;102403468;d?http://bbs.pcauto.com.cn/topic-4040395.html"; } return rootUrl + "/topic-" + ((Topic) object).getTid() + ".html"; } else if (object instanceof Post) { return rootUrl + "/post-" + ((Post) object).getTid() + '_' + ((Post) object).getPid() + ".html"; } else if (object instanceof String) { return (String) object; } else if (object instanceof User) { return "/" + ((User) object).getUid(); } else if (object instanceof ftree.Forum) { ftree.Forum forum = (ftree.Forum) object; return rootUrl + "/forum-" + forum.getFid() + ".html"; } else { return ""; } } } public static boolean isEmpty(String text){ return (null == text || "".equals(text)); } 活动开始前,咱们组的陈阳童鞋一马当先,只管抢占键盘,是的,他只用键盘,就已经将需要重构的方法提炼出来,完全忽略鼠标,看得我眼睛一眨一眨的,[[BR]] 虽然用时比较长,但还是暗下决定要学好vi的使用。[[BR]] 题目一出来,只见鸿源同志如风一般坐在了陈阳童鞋刚刚坐的位置,立马听到一连串的键盘音,声音过后,一个重构的新方法名就出来了,还带着测试类出来,[[BR]] 跟着,与他组队的炳岳同志讨论下一步该怎么做。当然,这一过程是非常激烈的,但慢慢地,他们的意见终于统一了,想法达成一致,这时,鸿源同志二话不说[[BR]] 马上又敲起键盘,将想法转变成测试代码。[[BR]] 时间是无情的,正当键盘敲得起劲的时候,每人7分钟的演练时间到了,这时咱们只有将想写的,但不够时间写的代码,换成语言,去跟下一位进行代码演示的童鞋交流[[BR]] 非常像头脑风暴,大量信息量同时在大脑出现,并且需要快速思考,学到的不仅仅是一段代码,还有思考问题的方法。[[BR]] 现在,咱们来看下测试代码[[BR]] {{{ import junit.framework.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class FunctionsTest { private String appName = null; private String itAppName = null; private String rootUrl = null; private String ucRoot = null; private Topic topic = null; private Forum forum = null; private Post post = null; private User user = null; @Before public void setUp() { appName = "pcauto"; itAppName = "itbbs"; rootUrl = "http://bbs.pcauto.com.cn"; ucRoot = "http://my.pcauto.com.cn"; topic = new Topic(); forum = new Forum(); post = new Post(); user = new User(); forum.setFid(123L); } @Ignore public void testHtmlUrl() { // 变化的对象 Object,rootUrl,appName, // Object是变化的,rootUrl,appName=auto 是固定的 Assert.assertEquals(rootUrl + "/topic-1342.html", Functions.htmlUrl(topic)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((Topic) null)); Assert.assertEquals(rootUrl + "/forum-123.html", Functions.htmlUrl(forum)); Assert.assertEquals(rootUrl + "/post-789789_2424242.html", Functions.htmlUrl(post)); Assert.assertEquals(ucRoot + "/2424", Functions.htmlUrl(user)); Assert.assertEquals("1234567", Functions.htmlUrl("1234567")); } @Test public void testHtmlUrlForum() { Assert.assertEquals(rootUrl + "/forum-123.html", Functions.htmlUrl(forum)); // Assert.assertEquals(rootUrl + "/f123.html", // Functions.htmlUrl(forum, rootUrl, itAppName)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((Forum) null)); } @Test public void testHtmlUrlTopic() { Assert.assertEquals(rootUrl + "/topic-1342.html", Functions.htmlUrl(topic)); // Assert.assertEquals(rootUrl + "/1342.html", // Functions.htmlUrl(topic, rootUrl, itAppName)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((Topic) null)); } @Test public void testHtmlUrlUser() { Assert.assertEquals(ucRoot + "/2424/", Functions.htmlUrl(user)); // Assert.assertEquals(rootUrl + "/123.html", // Functions.htmlUrl(user, ucRoot, itAppName)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((User) null)); } @Test public void testHtmlUrlPost() { Assert.assertEquals(rootUrl + "/post-789789_2424242.html", Functions.htmlUrl(post)); // Assert.assertEquals(rootUrl + "/p789789_2424242.html", // Functions.htmlUrl(post, rootUrl, itAppName)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((Post) null)); } @Test public void testHtmlUrlString() { Assert.assertEquals("123456", Functions.htmlUrl("123456")); // Assert.assertEquals("123456", // Functions.htmlUrl("123456", rootUrl, itAppName)); Assert.assertEquals(rootUrl + "/404.html", Functions.htmlUrl((String) null)); } } }}}[[BR]] 当然,少不了咱们组共同写出来的方法[[BR]] {{{ import java.text.MessageFormat; public class Functions{ private static String rootUrl = "http://bbs.pcauto.com.cn"; private static String appName = "pcauto"; /** * * 将页面链接静态化(wap),目前只支持Forum,Topic,Post,User对象,其他的如果是字符串则返回原字符串 *
修改些方法的规则的同时也要修改parserUrl方法 * tid等于{4018911,4027940, 4040395}销售配合,此帖子跳转到指定链接 * * @param object * * * @param type 1:web, 2:wap * @return */ public static String htmlUrl(Object object, int type) { boolean isIt = false; if (isIt && type != SystemConstant.TYPE_WAP ) { return ""; } else { switch (type) { case SystemConstant.TYPE_WEB: rootUrl = rootUrl; break; case SystemConstant.TYPE_WAP: rootUrl = rootUrl; break; default: break; } if ("".equals(rootUrl) || rootUrl == null) { return ""; } if (object instanceof Forum) { Forum forum = (Forum) object; if (!isEmpty(forum.getRedirectUrl()) && SystemConstant.TYPE_WEB == type) { return forum.getRedirectUrl(); } else { return rootUrl + "/forum-" + forum.getFid() + ".html"; } } else if (object instanceof Topic) { //销售配合,此帖子跳转到指定链接 if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4018911){ return "http://ad.doubleclick.net/clk;275446626;102403463;a?http://bbs.pcauto.com.cn/topic-4018911.html"; } if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4027940){ return "http://ad.doubleclick.net/clk;275446638;102403466;g?http://bbs.pcauto.com.cn/topic-4027940.html"; } if(SystemConstant.AUTO_APP_NAME.equals(appName) && ((Topic) object).getTid() == 4040395){ return "http://ad.doubleclick.net/clk;275446642;102403468;d?http://bbs.pcauto.com.cn/topic-4040395.html"; } return rootUrl + "/topic-" + ((Topic) object).getTid() + ".html"; } else if (object instanceof Post) { return rootUrl + "/post-" + ((Post) object).getTid() + '_' + ((Post) object).getPid() + ".html"; } else if (object instanceof String) { return (String) object; } else if (object instanceof User) { return "/" + ((User) object).getUid(); } else if (object instanceof ftree.Forum) { ftree.Forum forum = (ftree.Forum) object; return rootUrl + "/forum-" + forum.getFid() + ".html"; } else { return ""; } } } public static boolean isEmpty(String text){ return (null == text || "".equals(text)); } /** * 板块URL静态化 * @param forum 板块 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl(Forum forum) { if (forum == null) { return Tpl.NOT_FOUND_URL; } // if ("itbbs".equals(appName)) { // return rootUrl + "/f" + forum.getFid() + ".html"; // } else { // return rootUrl + "/forum-" + forum.getFid() + ".html"; // } return MessageFormat.format(Tpl.FORUM_URL, String.valueOf(forum.getFid())); } /** * 主题URL静态化 * @param topic 主题 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl(Topic topic) { if (topic == null) { return Tpl.NOT_FOUND_URL; } // if ("itbbs".equals(appName)) { // return rootUrl + "/" + topic.getTid() + ".html"; // } else { // return rootUrl + "/topic-" + topic.getTid() + ".html"; // } return MessageFormat.format(Tpl.TOPIC_URL, String.valueOf(topic.getTid())); } /** * 帖子URL静态化 * @param post 帖子 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl(Post post) { if (post == null) { return Tpl.NOT_FOUND_URL; } String pid = String.valueOf(post.getPid()); String tid = String.valueOf(post.getTid()); return MessageFormat.format(Tpl.POST_URL, new Object[]{tid, pid}); } /** * 用户URL静态化 * @param post 帖子 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl(User user) { if (user == null) { return Tpl.NOT_FOUND_URL; } return MessageFormat.format(Tpl.USER_URL, String.valueOf(user.getUid())); } /** * URL静态化 * @param str string * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl(String str) { if (str == null) { return Tpl.NOT_FOUND_URL; } return str; } /** * wap版版块URL静态化 * @param forum 版块 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl4Wap(Forum forum) { return ""; } /** * wap版帖子URL静态化 * @param post 帖子 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl4Wap(Post post) { return ""; } /** * wap版主题URL静态化 * @param topic 主题 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl4Wap(Topic topic) { return ""; } /** * wap版字符串URL静态化 * @param str string * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl4Wap(String str) { return ""; } /** * wap版用户URL静态化 * @param user 用户 * @param rootUrl 应用路径 * @param appName * @return */ public static String htmlUrl4Wap(User user) { return ""; } } 这期的代码道场就先介绍到这里,当然,有很多细节我都没写上,希望后来看到这文章的童鞋要留下你来过的足迹,将细节补上。[[BR]] 当然,还差总结呢,这次代码道场,因为选的题目是与工作有紧密联系的,所以大伙们的情绪都比较高涨,讨论过程也比较激烈,[[BR]] 重构的方法也写得比之前合理化,便于维护,不仅仅让大家再次深入理解演练测试驱动开发,还解决了工作上的问题,一举多得