演化架构和紧急设计: 利用可重用代码,第 2 部分:捕捉惯用模式
2010-07-19 00:00:00 来源:WEB开发网该类必须执行相当数量的工作来确保一个国家名的值是惟一的,不过它也展示了属性在 Java 编程中的强大功能。
属性是 Java 语言中备受青睐的一部分。您可以通过它们精确地定义有较广影响而在目标类中有较少语法残留的行为。但是,与 JRuby 等 JVM 上更具表达性的语言相比,它们所做的工作仍然很有限。
使用 JRuby 的 sticky 属性
Ruby 语言也有属性(不过它们不像 “属性” 一样有特定名称 — 它们是 Ruby 提供的其中一种元程序设计方法)。这里有一个例子。请看清单 11 中的测试类:
清单 11. 测试一个复杂的运算
class TestCalculator < Test::Unit::TestCase
def test_complex_calculation
assert_equal(4, Calculator.new.complex_calculation)
end
end
如果 complex_calculation 方法运行时间较长,您只想在执行验收测试时运行它,而不想在单元测试期间运行它。进行该限制的一种方式见清单 12:
清单 12. 限制测试范围
class TestCalculator < Test::Unit::TestCase
if ENV['BUILD'] == 'ACCEPTANCE'
def test_complex_calculation
assert_equal(4, Calculator.new.complex_calculation)
end
end
end
这是与测试相关的一种技术惯用模式,我可在多个上下文中轻松预见该测试的有用性。在一个 if 块中包装方法声明为我的代码增加了复杂度,因为并非所有方法声明都使用相同的缩进。因此我将使用一个属性捕捉该模式,如清单 13 所示:
更多精彩
赞助商链接