2011-12-26 65 views
3

据我所知,Bundles将分离功能。假设我有一个UserBundle & a BlogBundle。然后我的BlogBundle:Post将有一个author字段,其​​中引用UserBundle:User。这不会破坏Bundles的目的吗?我不能换另一个UserBundle?我怎样才能以正确的方式做到这一点?或者这是最好的呢?在Symfony 2和Coupling中集成Bundle(相关原则2实体)

+0

我发现令人讨厌的事情是:如果我向社区提供一个包,并且它有依赖关系,那么下游开发人员必须对这些代码进行安装。我想要一个deps系统,我为我的捆绑指定了deps,'bin/vendors install'负责它,而不需要下游开发者与第三方捆绑。这和缺乏内置管理生成器是我与s2竞争的主要观点(作为一名资深s1用户) – yitznewton 2011-12-26 16:13:53

+3

@yitznewton,[作曲家](https://github.com/composer/composer)正在开发中以解决这个问题。 – 2011-12-26 16:18:55

+0

@elnur我们什么时候会用完音乐项目名称? TY :) – yitznewton 2011-12-26 17:17:47

回答

6

如果您对捆绑之间的依赖关系感到不舒服(我个人同意您的看法),您可以在任何捆绑之外创建模型。这可以像这样配置...

doctrine_mongodb: 
    document_managers: 
     default: 
      mappings: 
       model: 
        type: annotation 
        dir: %kernel.root_dir%/../src/MyApp/Model 
        prefix: MyApp\Model\ 
        alias: Model 

ORM的配置看起来很相似。

+0

我从来没有使用过这种方法,我很好奇你将如何引用一个仓库,因为你通常会写'SomeBundle:SomeEntity'。前缀代替捆绑吗?例如'MyApp:Model'(根据您的示例配置)? – 2011-12-26 19:18:06

+1

但是,假设我正在开发一个'UserBundle',我可以将它用于多个项目,我不需要单独分发模型吗?此外,它似乎是这样,只是另一个捆绑,而不是“正式”一个 – 2011-12-27 02:44:36

+1

@Arms:您将使用配置的别名引用模型(即'型号:用户') – 2011-12-27 23:27:12

3

捆绑是为了尽可能地分开功能,但这并不意味着有些不会依赖于其他。

我认为有趣的是,甚至一些Symfony2组件,它们应该是独立的库,都有依赖关系。例如,HttpKernel类取决于来自HttpFoundationEventDispatcher组件的类。

在您的示例中,如果您需要在另一个UserBundle中进行交换,则必须采取必要步骤以确保您的BlogBundle的依赖关系仍然满足。这可能意味着你需要重构。

因此,捆绑的目的不会被打败,因为一个引用另一个。即使它们不总是100%解耦,捆绑仍然有利于使用。

0

那么,在另一个应用程序的上下文中,人们可能不希望将给定的博客帖子绑定到个人/用户,而不是群组。为了保持代码的最大可移植性,我认为你应该抽象一下这个场景。关系将是不可接受的。另一方面,所有者的身份是。

所以想象一个给定的博客文章有一个所有者。在上下文中,如果一个不同的应用程序有自己的捆绑包,所有者标识可能是一个组,一个用户,一个外部来源等。

Imho您应该只使用编写文章的“one”并不意味着这将成为本地数据库上的“人员”。