这是一个名称空间还是一个类

Should this be a namespace or a class?

本文关键字:一个 空间      更新时间:2023-10-16

当您有一组函数之间没有交互时,您可以将它们放在名称空间中。(以math命名空间为例)

当你有一些公共属性和一组可选的作用于这些属性的函数时,它应该成为一个类。

但是当你有一组相关的函数但是没有公共属性的时候呢?一个例子是事件管理器:您可能只有subscribe()post()dispatch(),没有公共属性;但是,您确实有隐藏的属性,如订阅者列表和三个函数所作用的事件队列。这应该是一个类还是一个名称空间?

任何时候你的行为和状态都应该是一个类,即使这个状态不是公共可访问的。这样做的一个实际原因是,这样可以更容易地对其他与该模块交互的模块进行单元测试。

一个类。您有一个状态(尽管是内部状态),因此您可能希望创建两个事件管理器(两个队列)。

这肯定应该是class,因为它有内部状态。如果需要多个实例怎么办?在这种情况下,名称空间无法帮助您,而类可以。

如果你想创建一个或多个实例,每个实例都有一个生命周期,那么它应该是一个类。

事件管理器听起来像是你想要创建、使用然后销毁的东西。所以,它应该是一个类。

名称空间的引入只是为了帮助处理非常大的程序。在一个大型程序中,您可能有多个开发团队,每个团队编写代码。对于每个团队来说,确保没有其他人使用与其他人相同的函数或类名可能是不可行的。或者,事物的名称可能与可能想要使用的第三方库冲突。名称空间有助于避免这些问题。如果您不是在一个大型项目上工作,那么您可能真的不需要为自己的代码使用名称空间,除非您觉得需要将代码组织到几个名称空间中以保持整洁。使用不必要的小名称空间会使代码难以处理。过分纠结代码应该放在这个名称空间还是那个名称空间是没有多大意义的,最好把重点放在确保代码实际工作上。