我正在设计一个类,如果某些方法公开为公开,它们不会造成任何伤害。但它们也可以是私有的,因为它们只能在我的项目中使用同一个类。
公开它们有以下优点:
将它们设为私有具有以下优点:
这种情况下的一般指导原则是什么?
答案 0 :(得分:13)
始终尽可能保密。
对于单元测试,我有时会创建一个成员 internal ,然后使用AssemblyInfo.cs中的InternalsVisibleTo
属性来允许单元测试程序集访问内部成员。
答案 1 :(得分:5)
在这种情况下,我通常会尽可能地将它们设为私有,然后在需要时提升它们的可访问性(例如,来自其他类的代码将受益于能够直接访问这些方法)。将方法添加到API中很容易,并且更难以删除它们(不破坏其他代码)。
答案 2 :(得分:4)
我非常喜欢公开您明确要公开的内容。我喜欢我班上给我的温暖安全的茧。
答案 3 :(得分:4)
哦,请阅读Ch。 06史蒂夫麦康奈尔的代码完成2,如果你有权访问它。这将完美地回答你的问题。
一般情况下,如果方法适合班级的整体“角色”,请将其公之于众。从技术上讲,尽量不要打破抽象。我会举个例子,但我不知道你工作的背景,所以这些例子可能无关紧要。
如果您不需要它,则无需公开Method。
进行测试时,+1给John打磨机。
但我真的无法在这里解释,正如史蒂夫在CC2中所解释的那样。
我希望可以在Satckoverflow上发布书籍参考吗? (请评论。)
答案 4 :(得分:3)
类型的唯一公共成员应该是类型本身的公共接口的一部分。您的目标应该是将类型的接口最小化到最少数量的成员,并且几乎不暴露任何底层实现。
答案 5 :(得分:2)
如果你发现很难彻底测试一个课程,那么课程可能会做得太多。使用组合拆分班级可以使单个单元更易于测试。
有时它是有道理的,有时则不然。只是一个想法。
答案 6 :(得分:1)
我永远不会让我的私人公开!周期。
答案 7 :(得分:1)
公开您的目标客户和使用场景所需的内容,仅此而已。我不会将单元测试视为客户端并进行更改,以便开始时不打算公开使用的代码只是为了单元测试而公开访问。如果你这样做,你会混乱你的api,降低api的可用性,并使未来的更改变得更难而且不理想,因为现在可能有客户端代码使用了应该是私有api。
我会检查你是否有更好的选择。例如,您可以在Visual Studio 2005和2008中生成私有访问器,使公共类的非公共API可公开用于测试目的。这可能会使您的单元测试代码变得混乱,但对我来说最重要的是您的设计以及您向客户(包括您和您的团队)发布的API。
另一方面,我还要提到单元测试为您提供了一个很好的机会,让您了解您的设计有多好,以及从客户角度来看您的api是多么容易。在单元测试开发过程中遇到挫折,问题等,您可以进行更改以增强您的api和设计,使其更加简单,美观和实用。