11

我在 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 表达式?

4

3 回答 3

21

这基本上取决于偏好。

这是我对事物的看法:

注释的优点:

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

yaml/xml 的优点

  • 这使域对象保持干净,因此持久层绝对不会泄漏到域中(即使是以注释的形式)

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

从性能的角度来看,在生产中您应该使用学说的缓存来缓存映射,所以它们在这里也是相等的。

关于这一点:“我将不得不编写大量代码、setter 和 getter、映射信息”:

Doctrine 需要私有/受保护的属性,因此您仍将编写 getter 和 setter。而且您仍将在另一个地方编写映射信息。

就个人而言,我会使用注释,因为如果您需要它们,查找示例和信息会容易得多。

于 2012-09-21T09:57:22.393 回答
20

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

此外,在评论上写“功能性”的东西也很奇怪。

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

YAML 比其他任何一种都更具可读性,但它也依赖于空间标识(有些人不喜欢)。Symfony 默认使用 YAML 进行配置,因此许多使用 Symfony 的人选择使用 YAML 进行学说映射——这意味着 YAML 示例有很好的文档记录,并且那里有很多资源。

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


附加信息:

如果您使用的是 PHP 7.0 或更高版本,那么opcache.save_comments = 0如果您使用注释,则永远无法在 php.ini 上进行设置。PHP 有一种去除注释的本机方式,这会破坏您的应用程序。Guilherme Blanco 是 Doctrine 最活跃的维护者之一,也是开发大多数项目(Doctrine、Symfony)使用的注释检索类的人,他反对评论注释(如果你阅读了整个线程,你会发现他非常热情对这个)。关于 Reddit 上的评论注释问题也有一些广泛的讨论,大多数人似乎都同意这是一个坏主意。

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

于 2013-07-11T13:44:41.840 回答
7

我认为这是个人品味的问题,我更喜欢注释。

我使用注释是因为如果您想了解该字段上方的字段的任何信息,否则您必须打开一个新文件并搜索您需要的规则。

找出它以创建这两种情况的最佳方法。然后你看看你喜欢什么。

于 2012-09-21T09:51:43.217 回答