4

类似问题

我的问题

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

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

4

1 回答 1

10

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

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

这应该几乎涵盖了您的所有情况。
希望这可以帮助。

于 2011-08-12T07:29:21.377 回答