我在大约 12 人的开发团队中工作,我们构建了一组合理的 API,我们仅在内部严格使用这些 API。通常,所有类和接口都是公共的,因为这就是它们的完成方式。我经常考虑将一些构造函数设为内部的价值,这样 API 的使用者(尽管是内部的)必须使用工厂或其他我现在想不到的原因。
这是你和你的团队练习的吗?
这对您的单元测试有何影响?您是否发现可以通过它的工厂对一个类进行单元测试,或者您是否可以通过 PrivateObject 之类的东西访问构造函数?
我在大约 12 人的开发团队中工作,我们构建了一组合理的 API,我们仅在内部严格使用这些 API。通常,所有类和接口都是公共的,因为这就是它们的完成方式。我经常考虑将一些构造函数设为内部的价值,这样 API 的使用者(尽管是内部的)必须使用工厂或其他我现在想不到的原因。
这是你和你的团队练习的吗?
这对您的单元测试有何影响?您是否发现可以通过它的工厂对一个类进行单元测试,或者您是否可以通过 PrivateObject 之类的东西访问构造函数?
答案是肯定的;我目前的项目只有一位开发人员——我——但我仍然根据需要使用可见性和其他访问修饰符,以及更复杂的设计模式。原因如下:
如果您愿意,编译器可以成为您实施良好设计模式的最佳工具之一。当你必须维护一个对象,其在程序执行期间的正常状态是面向对象的等价物时,将所有内容公开可能会导致很多麻烦从他的孩子到他的电力公司,他都认识他,他在他的重要器官中四处寻找,让他做他们想做的事。增加另一只手或移开一只手可能会导致患者心脏骤停。
代码应该是自我记录的。被标记为内部的类或类成员意味着它可能应该是;如果一切都是公开的,那么您不知道在与对象交互时是否有任何不应该触摸的东西。再一次,你让你的病人坐在手术台上,突然一个新人进来,抓住肝脏说“嘿,这有什么用?”。对象应该握手,被告知做某事并放手去做,除了他们之外,他们的肝脏功能与任何人无关。
代码应该由您的后代维护。这与前两条规则有关,但基本上,有人应该能够打开您的代码库,找到入口点并跟踪基本执行流程,同时查看沿途使用的对象并确定它们的一般形式和功能. 回到我们在手术台上的病人,假设五年后有人走进这个场景;一个人在一张桌子上裂开,里面有 50 个人。这看起来不像他见过的任何礼貌的社会习俗。它可能看起来最像一种仪式性的人祭,大多数人遇到这种情况时的第一反应就是逃跑。
然而,硬币的另一面是,为自己而实施的设计模式通常是非常糟糕的事情。一旦你大学毕业并找到你的第一份工作,没有人会真正关心你是否知道如何实施策略模式,而且你不应该一有机会就这样做,只是说你做到了。每种模式都有一套适用的环境。如果你是一名医生,你会为下一个走进来只是说你能做到的病人进行血管成形术吗?