快速业务通道

演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
声明都使用相同的缩进。因此我将使用一个 属性捕捉该模式,如清单 13 所示:

清单 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 和属性作为获取惯用模式的方法。如果您能够设法将获取的模 式从其他代码中凸显出来,那么就更易于同时读取两种代码,因为它们不相互混杂。

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号