我应该在Doctrine 2中使用YAML / XML或注释映射吗?

时间:2012-09-21 09:45:51

标签: symfony doctrine-orm

我在Symfony框架中使用Doctrine 2作为ORM。使用基于注释的实体映射,我将不得不编写大量代码(setter和getter,映射信息等)。使用YAML / XML我不需要写很多列定义和元数据。在Doctrine文档中,它们主要使用注释,很少使用YAML或XML。

我应该使用YAML / XML还是注释?

对于注释,我可以在http://docs.doctrine-project.org/en/latest/reference/annotations-reference.html找到每个注释的文档。我找不到YAML或XML中的注释等价物;如何将注释转换为等效的YAML / XML表达式?

3 个答案:

答案 0 :(得分:21)

这基本上取决于偏好。

这是我对事物的看法:

注释的优点:

  • 更容易使用,因为它们接近他们所描述的(属性)
  • 很多例子都使用它们,正如您已经注意到的那样

yaml / xml的优点

  • 这样可以保持域对象的清洁,所以持久层绝对没有泄漏到域中(即使是以注释的形式)

如果您更改数据库或域,您仍然需要以任何一种形式维护它们,因此从这个角度来看,任何方向都没有真正的优势。

从性能的角度来看,在生产中你应该使用doctrine的缓存来缓存映射,所以它们在这里也是一样的。

对此:“我必须编写大量代码,setter和getter,映射信息”:

Doctrine需要私有/受保护的属性,因此您仍然会编写getter和setter。你仍然会在另一个地方写下地图信息。

就个人而言,我会使用注释,因为如果需要,可以更容易地找到示例和信息。

答案 1 :(得分:19)

使用Annotations有一个缺点。由于它们是在注释上定义的(这很奇怪),因此您将无法使用预编译器(如Zend Guard)或某些字节码php缓存扩展来增强代码性能( some < / strong>他们删除评论)。由于注释是唯一具有此技术缺陷的规范,因此我不建议使用它。

另外,在评论上写“功能性”的东西真是太奇怪了。

XML比YAML更冗长,但也更广为人知。 XML的文档示例是所有选项中最差的。

YAML比其他任何一个都更具可读性,但它也依赖于空间识别(有些人不喜欢)。 Symfony默认使用YAML进行配置,因此许多使用Symfony的人选择使用YAML作为学说映射 - 这意味着YAML示例已有详细记录,并且有大量资源。

我个人更喜欢YAML。我可以使用doctrine模式工具自动生成实体(这意味着我不必编写getter / setter)。我也可以使用预编译器/字节码缓存选项,而不必担心我的评论被删除。


其他信息:

如果您使用的是PHP 7.0或更高版本,如果您正在使用注释,则无法在php.ini上设置opcache.save_comments = 0。 PHP有一种本地方式来删除注释,这将破坏您的应用程序。 Guilherme Blanco,Doctrine最活跃的维护者之一,也是开发大多数项目使用的注释检索类的人(Doctrine,Symfony)has spoken out AGAINST comment annotations(如果你读完整个帖子,你会发现他非常热衷于这个)。还有一些extensive discussion on the issues with comment annotations on Reddit,大多数人似乎都认为这是一个坏主意。

尽管如此,Symfony的官方最佳实践书建议人们使用Annotations。因此,大多数Symfony捆绑包可能会使用注释作为其元数据格式。

答案 2 :(得分:7)

我认为这是一个自己喜欢的问题,我更喜欢注释。

我使用注释,因为如果你想知道一个字段在字段上方的任何信息,那么你必须打开一个新文件并搜索你需要的规则。

最好的方法来解决它创建两个案例。然后你看看你喜欢什么。