您可能正在逆流而上尝试做子模块——而且您可能不需要这样做。
如果你已经很好地编写了你的模块,加载它不会是一个非常昂贵的操作。请记住,服务管理器的全部意义在于所有这些服务都是延迟创建的。因此,如果调用代码从不要求特定请求中的特定服务,则该服务的类文件永远不会自动加载,对象永远不会实例化,等等。所以你可能会很好地留在一个大的、单片的模块中。
事情可能会变得有点棘手的一个地方是,如果您严重依赖 EventManager,并且您的模块正在附加一堆侦听器。但是您可以通过设置一些模块配置指令来解决这个问题,然后有条件地附加侦听器。
话虽如此,尝试拆分模块可能是有意义的。所以你可以有 FooBar 和 FooBaz 模块。
如果你真的,真的,想要子模块,你可以深入 ModuleManager 并尝试找出它。有一次我沿着那条路走了一小段路——然后就分心了。就我而言,我正在处理运送实物物品。我想要一个“Fulfillment”模块,可以配置为加载一堆类似的运输模块(Fulfillment\Courier\USPSModule、Fulfillment\Courier\FedExModule 等),这样我的主 Fulfillment 模块就可以遍历所有加载的子模块,而无需特定关于其中任何一个的知识。如果我没记错的话,最好的方法是从本质上反映 ZF2 所做的事情,但在我的 Fulfillment\Module 类中。但是,我想不出很多你想要这样做的情况,除非你想要一组类似的子模块,它们都实现了相同的接口,并希望它们被没有特定知识的超级模块使用。我也看了这个,因为正在考虑最终用户在运行时启用/禁用这些子模块(有点像插件系统)。
如果你不这样做,我会说坚持使用 FooBarModule、FooBazModule 等,只要它是有意义的。请记住,即使您的模块包含大量代码,ServiceManager 也只会自动加载、解析和实例化满足任何给定请求的依赖关系所需的类。