WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发Java 演化架构与紧急设计: 积累惯用模式 阅读

演化架构与紧急设计: 积累惯用模式

 2010-01-20 00:00:00 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愬灚瀚梺鍨儏閳ь剙绉归弻銊р偓闈涙啞閻h京鈧敻鍋婇崰鏍х暦閿燂拷
核心提示: 所有这些类中都包含以上两个方法中的一个或两个!我发现了一个惯用模式,显然,演化架构与紧急设计: 积累惯用模式(6),Struts 中的很多类需要覆盖和定制处理参数的行为,所有这些类各自负责定制, 修复结构性重复的一种常见的技巧是使用元编程将重复的结构封装到一个地方,清单 2 显示一个新的方法,现

所有这些类中都包含以上两个方法中的一个或两个!我发现了一个惯用模式。显然,Struts 中的很多类需要覆盖和定制处理参数的行为,所有这些类各自负责定制。现在的问题是:如何使之变得更好?

改进代码,第 1 部分

在 UIBean 的 evaluateParams() 方法中,可以看到很多不同的结构性重复,我的一个同事称之为 “相同的空格,不同的值”。换句话说,结构相同,但是代入不同的类或变量名。这代表着一种代码味道,因为应用程序中前后出现实际上可以复制-粘贴的代码,这些代码差别很小。

修复结构性重复的一种常见的技巧是使用元编程将重复的结构封装到一个地方。清单 2 显示一个新的方法,以及 evaluateParams() 方法中经过改进的前一部分,这里使用反射提供所需的不同的值:


清单 2. 通过元编程消除结构性重复

protected void handleDefaultParameters(final String paramName) { 
 try { 
   Field f = UIBean.class.getField(paramName); 
   if (f.get(this) != null) 
     addParameter(paramName, findString(paramName));       
 } catch (Exception e) { 
   throw new RuntimeException(e.getMessage()); 
 } 
} 
 
public void evaluateParams() { 
 
 addParameter("templateDir", getTemplateDir()); 
 addParameter("theme", getTheme()); 
 
 String[] defaultParameters = new String[] {"label", "labelPosition", "requiredPosition", 
   "tabindex", "onclick", "ondoubleclick", "onmousedown", "onmouseup", "onmouseover", 
   "onmousemove", "onmouseout", "onfocus", "onblur", "onkeypress", "onkeydown", 
   "onkeyup", "onselect", "onchange", "accesskey", "cssClass", "cssStyle", "title"}; 
 
 for (String s : defaultParameters) 
   handleDefaultParameters(s); 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接