> When do you write a private method, versus protected?
> Best to use Private methods or Protected methods?
> Reasons to use private instead of protected for fields and methods
我的问题
许多人同意只有在您有理由使用受保护的方法时才应使用受保护的方法.测试驱动的开发模型如何进入这个? (特别是关于伪装对象.)我有一个朋友,他是TDD的忠实粉丝,现在是BDD并且是C#开发人员,他告诉我他几乎不使用私有关键字.在他这么说之后,我继续将它用于田野,但开始默认我的所有方法都受到保护. StackOverflow上的一些人也同意默认情况下应该使用受保护的 – 你们有些人可以在这个问题上加以考虑吗?默认情况下使用受保护的最佳理由是什么(因为上面的线程解释的原因不是)?
编辑:根据Oded的评论,如何使用默认保护和开放原则(一个类应该是开放的扩展和关闭修改)?
以下是我认为最佳做法,与我的发展有关并向我的所有客户提出建议:>从测试开始(或规范,如果您正在进入BDD).您从测试中提取的生产类和方法应该是公开的.
>注意:如果您正在使用.NET进行开发,则可能需要考虑使用internal关键字(并将InternalsVisibleTo程序集属性添加到生产程序集中,以便测试项目可以使用代码).那么只有当另一个生产组件依赖它时,你才会公开它.
>作为TDD重构阶段的一部分创建的任何方法都应该是私有的.
>仅在派生生产类需要时才使受保护方法受到保护.
>在重构阶段创建的任何方法(现在是私有的或受保护的),您在另一个生产类中需要的方法应该被提取到辅助类并公开(或者在.NET中内部,以及支持该概念的任何语言).
>如果另一个程序集中需要帮助程序类,则:
>如果另一个程序集已经依赖于辅助类的程序集,请将帮助程序类设为public(如果尚未使用).
>如果另一个程序集不依赖于辅助类的程序集,请将帮助程序类提取到辅助程序程序集(最合适的或新的程序集)并将其公之于众.确保原始程序集引用新的帮助程序集(如果尚未引用).
这应该几乎涵盖了你的所有情况.希望这可以帮助.