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

Kei*_*son 4 oop tdd unit-testing design-principles

类似的问题

我的问题

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

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

Ass*_*one 10

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

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

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