Symfony 3 前端和后端包之间的共享实体
Shared Entities between Frontend and Backend Bundles in Symfony 3
在典型的web应用中,根据Separation of concerns原则,作为frontend和 backend 部分,有几乎完整的不同
- 表格
- 例外情况
- 观看次数
- 控制器
我决定我的 Symfony 网络应用程序有单独的 Bundles 用于 Frontend 和 后端(以及API)。
问题在于 Entities,因为它们可以通用。但是我不知道如何合理地构建我的应用程序。
我认为:
src
|---AppBundle
|---FrontendBundle
|---BackendBundle
和
src
|---AppBundle
|---FrontendBundle
|---BackendBundle
和
src
|---FrontendBundle
|---BackendBundle
各有利弊。但我不知道如何跨捆绑共享 Entities。
我会使用第一个结构,但在同一个命名空间下,
喜欢:
src
|---App
|---ApiBundle
|---FrontendBundle
|---BackendBundle
此外,您为什么需要 frontendBundle 中的实体?我相信您可以通过 Entity Manager 从 ApiBundle 访问 backendBundle 的实体。
您可以在每个捆绑包中使用它:
$em = $this->getDoctrine()->getManager();
$em->getRepository(Tasks::class)->findAll();
在深入研究 Symfony Bundles 和其他明确定义的概念和组件(如 Symfony Components 之后,我发布了这个答案对于有类似问题的人进一步参考这个问题:
什么应该被视为捆绑包?
- 捆绑包类似于其他软件中的插件
- Bundle 是 Symfony第一个class 公民
- 您可以使用第三方捆绑包
中打包的预建功能
- 您可以分发您的自己的捆绑包
- 您可以挑选并选择要在您的应用程序中启用的功能
There are two types 个捆绑包:
- 特定于应用程序的捆绑包:仅用于构建您的应用程序(驻留在
src
目录中)
- 可重复使用的包:意在跨多个项目共享。 (驻留在
vendor
目录中)
现在怎么办?
所以,到目前为止,我的应用程序结构是这样设计的:
我的 Bundle 不会 可重复使用 ,它是 Application-specific , 所以它将驻留在 src
目录中。
没有必要将 BackendBundle 和 FrontendBundle 分开,因为它们紧密耦合。所以:
- 我将在
src
下只有 AppBundle(或为它选择的更好的名称)
为了分离后端和前端功能,我使用命名空间 :
\src\AppBundle\Controller\Backend\UserController
\src\AppBundle\Controller\Frontend\UserController
或
\src\AppBundle\Form\Backend\UserType
\src\AppBundle\Form\Frontend\UserType
Entities 在 Backend & Frontend 之间共享因此位于:
\src\AppBundle\Entity
业务逻辑喜欢:
- 任何 DTO(数据传输对象)
- 任何数据处理程序(操作模型数据)
- 任何存储库 class 或类似 classes
- 任何实用程序和助手class(帮助操作模型数据)
- 任何与模型数据相关的接口
居住地:
\src\AppBundle\Model
此模式也可用于其他事情,例如 views & exceptions。
src
|
└---AppBundle
|
|---Controller
| |
| |---Backend
| | |
| | └---UserController
| |
| └---Frontend
| |
| └---UserController
|
|---Entity
|
|---Form
| |
| └---Backend
| | |
| | └---UserType
| |
| └---Frontend
| |
| └---UserType
|
└---Model
|
|---Repository
|
└---Handler
在典型的web应用中,根据Separation of concerns原则,作为frontend和 backend 部分,有几乎完整的不同
- 表格
- 例外情况
- 观看次数
- 控制器
我决定我的 Symfony 网络应用程序有单独的 Bundles 用于 Frontend 和 后端(以及API)。
问题在于 Entities,因为它们可以通用。但是我不知道如何合理地构建我的应用程序。
我认为:
src
|---AppBundle
|---FrontendBundle
|---BackendBundle
和
src
|---AppBundle
|---FrontendBundle
|---BackendBundle
和
src
|---FrontendBundle
|---BackendBundle
各有利弊。但我不知道如何跨捆绑共享 Entities。
我会使用第一个结构,但在同一个命名空间下, 喜欢:
src
|---App
|---ApiBundle
|---FrontendBundle
|---BackendBundle
此外,您为什么需要 frontendBundle 中的实体?我相信您可以通过 Entity Manager 从 ApiBundle 访问 backendBundle 的实体。
您可以在每个捆绑包中使用它:
$em = $this->getDoctrine()->getManager();
$em->getRepository(Tasks::class)->findAll();
在深入研究 Symfony Bundles 和其他明确定义的概念和组件(如 Symfony Components 之后,我发布了这个答案对于有类似问题的人进一步参考这个问题:
什么应该被视为捆绑包?
- 捆绑包类似于其他软件中的插件
- Bundle 是 Symfony第一个class 公民
- 您可以使用第三方捆绑包 中打包的预建功能
- 您可以分发您的自己的捆绑包
- 您可以挑选并选择要在您的应用程序中启用的功能
There are two types 个捆绑包:
- 特定于应用程序的捆绑包:仅用于构建您的应用程序(驻留在
src
目录中) - 可重复使用的包:意在跨多个项目共享。 (驻留在
vendor
目录中)
现在怎么办?
所以,到目前为止,我的应用程序结构是这样设计的:
我的 Bundle 不会 可重复使用 ,它是 Application-specific , 所以它将驻留在 src
目录中。
没有必要将 BackendBundle 和 FrontendBundle 分开,因为它们紧密耦合。所以:
- 我将在
src
下只有 AppBundle(或为它选择的更好的名称)
为了分离后端和前端功能,我使用命名空间 :
\src\AppBundle\Controller\Backend\UserController \src\AppBundle\Controller\Frontend\UserController
或
\src\AppBundle\Form\Backend\UserType \src\AppBundle\Form\Frontend\UserType
Entities 在 Backend & Frontend 之间共享因此位于:
\src\AppBundle\Entity
业务逻辑喜欢:
- 任何 DTO(数据传输对象)
- 任何数据处理程序(操作模型数据)
- 任何存储库 class 或类似 classes
- 任何实用程序和助手class(帮助操作模型数据)
- 任何与模型数据相关的接口
居住地:
\src\AppBundle\Model
此模式也可用于其他事情,例如 views & exceptions。
src
|
└---AppBundle
|
|---Controller
| |
| |---Backend
| | |
| | └---UserController
| |
| └---Frontend
| |
| └---UserController
|
|---Entity
|
|---Form
| |
| └---Backend
| | |
| | └---UserType
| |
| └---Frontend
| |
| └---UserType
|
└---Model
|
|---Repository
|
└---Handler