WEB开发网
开发学院软件开发Java 利用可重用代码,第 2 部分:捕捉惯用模式 阅读

利用可重用代码,第 2 部分:捕捉惯用模式

 2010-06-24 00:00:00 来源:WEB开发网   
核心提示: 清单 13. 在 Ruby 中声明一个属性classTestCalculator<Test::Unit::TestCaseextendTestDirectivesacceptance_onlydeftest_complex_calculationassert_equal(4,Calcula

清单 13. 在 Ruby 中声明一个属性

class TestCalculator < Test::Unit::TestCase  
 extend TestDirectives 
  
 acceptance_only 
 def test_complex_calculation 
  assert_equal(4, Calculator.new.complex_calculation)     
 end 
end  

该版本更清晰且易于读取。清单 14 中所示的实现无关紧要:

清单 14. 属性声明

module TestDirectives 
 def acceptance_only 
  @acceptance_build = ENV['BUILD'] == 'ACCEPTANCE' 
 end 
  
 def method_added(method_name) 
  remove_method(method_name) unless @acceptance_build 
  @acceptance_build = false 
 end 
end       

在 Ruby 中使用如此少的代码所能完成的工作令人惊叹。清单 14 声明了一个 module,它是 Ruby 的混合版本。一个混合版本含有一个您可以包括(include)到类中的功能,从而将该功能添加到类中。您可以将其作为一种接口,一种可包含代码的接口。该模块定义一个名为 acceptance_only 的方法,该方法检查 BUILD 环境变量,确定哪个测试阶段处于执行中。一旦设置了这个标志,模块利用一个 hook 方法。Ruby 中的 Hook 方法在解译时(而非运行时)执行,且每次向类添加新方法时该 hook 方法都会启动。如果设置了 acceptance_build 标志,该方法在执行时会删除刚才定义的方法。然后将标记设置回 false。(否则,该属性会影响所有随后的方法声明,因为标记仍然为真。)如果您希望它影响包含诸多方法的代码块,您可以删除标志的重新设置,让该行为一直保持到有其他因素(比如用户定义的 unit_test 属性)改变它时。(这些通俗地讲就叫做 sticky 属性。)

为阐述该机制的功能,Ruby 语言本身使用 sticky 属性来声明 private、protected 和 public 类作用域修饰符。没错 — Ruby 中的类作用域界定不是关键词,它们仅仅是 sticky 属性。

结束语

在本期中,我们展示了如何使用 APIs 和属性作为获取惯用模式的方法。如果您能够设法将获取的模式从其他代码中凸显出来,那么就更易于同时读取两种代码,因为它们不相互混杂。

在下一期中,我们将继续展示如何通过用于构建域特定语言的一系列方法获取惯用模式。

上一页  3 4 5 6 7 8 

Tags:利用 重用 代码

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