最佳实践:默认的受保护或私有方法和测试驱动开发

时间:2011-08-11 18:39:14

标签: oop unit-testing tdd design-principles

类似问题

我的问题

许多人都同意只有在您有理由使用受保护的方法时才应使用受保护的方法。测试驱动的开发模型如何进入这个? (特别是关于伪装对象。)我有一个朋友,他是TDD的忠实粉丝,现在是BDD并且是C#开发人员,他告诉我他几乎不使用private关键字。在他说完之后,我继续将它用于字段,但开始将我的所有方法默认为protected。 StackOverflow上的一些人也同意默认情况下应该使用protected - 你们中的一些人可以在这个问题上加油吗?默认情况下使用protected的最佳理由是什么(因为上面的线程解释的原因不是)?

编辑:根据Oded的评论,默认情况下使用protected和开放封闭原则(一个类应该开放以进行扩展并关闭以进行修改)怎么样?

1 个答案:

答案 0 :(得分:10)

以下是我认为最佳做法,与我的发展有关并向我的所有客户提出建议:

  1. 从您的测试开始(或规范,如果您正在进入BDD)。您从测试中提取的生产类和方法应公开
    • 注意:如果您使用.NET进行开发,您可能希望考虑使用内部关键字(并将 InternalsVisibleTo 程序集属性添加到生产程序集中,因此您的测试项目可以使用代码)。然后,只有当另一个生产程序集依赖它时,才会将其设为公开
  2. 您在TDD的重构阶段创建的任何方法都应设为私有
  3. 仅在派生生产类需要帮助方法保护时才生成帮助方法。
  4. 另一个生产类中需要的重构阶段(现在为私有或受保护)中创建的任何方法都应解压缩到辅助类并使公共(或.NET中的内部,以及支持该概念的任何语言)。
  5. 如果另一个程序集中需要帮助程序类,则:
    • 如果其他程序集已经依赖于帮助程序类的程序集,请将帮助程序类公开(如果尚未)。
    • 如果其他程序集依赖于帮助程序类的程序集,请将帮助程序类提取到帮助程序集(最合适的或新的)和让它公开。确保原始程序集引用新的帮助程序集(如果尚未引用)。
  6. 这几乎涵盖了你的所有案件 希望这会有所帮助。