统一文档建议使用命名空间来组织您的
代码,避免扩展类名,并使代码更易于维护。
是的!
ControlerCameraAction 变为 Controleurs.Cameras.Action 和
CameraAction 变为 Cameras.Action。
是的,也不是。
命名空间背后的理念是组织,而不仅仅是简单的use this feature called namespaces。该组织应该遵循一个逻辑。如果每个类都有不同的命名空间,那么您将必须导入与您将在代码中使用的类一样多的命名空间。
您可以从“模块”的角度进行思考,或者看看分层架构是否对您有用。
如果你有 ControllerCameraAction 和 CameraAction,你可以 a.- 使用命名空间 Cameras (那么你将有 Cameras.CameraAction 和 Cameras.ControllerCameraAction),b.- 如果你有分层架构(如 MVP、MVVM 或更多的 DomainDesign Driven 等)您可以使用层名称和模块来拥有命名空间。 (然后你会得到Presentation.Cameras.ControllerCameraAction、Domain.Cameras.CameraAction 之类的东西,这可以帮助你关注Onion architecture)。
namespaces 的语法如下:
namespace Domain.Cameras
{
public class CameraAction
{
}
}
然后你将它们与using 指令一起使用
using Domain.Cameras;
namespace Presentation.Cameras
{
public class ControllerCameraAction
{
private CameraAction cameraAction;
...
}
}
更多关于命名空间here!
默认情况下,所有没有显式命名空间的类都属于 global 命名空间,因此即使您没有编写任何命名空间,您也正在使用一个。
Unity 不会在命名空间之间产生任何区别,这更像是一个 c# 特性。它有助于组织、关注点分离原则以及避免名称冲突,但在最后一个实例中,您的类名仍应具有代表性和清晰性,足以理解该类的作用。如果你看到
Camera.cs 和
Camera.cs 真的很难看出哪个类做了什么。如果您打开这些文件并查看它们所在的名称空间/代码/文件夹,这将有所帮助,但我们的想法是节省那些额外的秒数/认知负载,并且更明确地使用您的名称。
作为补充,您可以在这里看到另一个有趣的discussion about namespaces use。