我在Symfony框架中使用条令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表达式?
这基本上取决于偏好。
这是我对事物的看法:
注释的优点:
- 更容易使用,因为它们接近于它们所描述的(属性)
- 正如你已经注意到的,很多例子都使用了它们
yaml/xml 的优点
- 这可以保持域对象的干净,因此持久层中绝对没有任何东西泄漏到域中(即使是以注释的形式)
如果你更改数据库或域,你仍然必须以任何一种形式维护它们,所以从这个角度来看,在任何方面都没有真正的优势。
从性能的角度来看,在生产中,您应该使用条令的缓存来缓存映射,因此它们在这里也是相等的。
关于这一点:"我必须写很多代码,setter和getter,映射信息":
条令需要私有/受保护的属性,所以您仍将编写getter和setter。你仍然会在另一个地方写地图信息。
就我个人而言,我会选择注释,因为如果你需要的话,可以更容易地找到例子和信息。
使用Annotations有一个缺点。由于它们是在注释上定义的(这很奇怪),您将无法使用预编译器(如Zend Guard)或一些字节码php缓存扩展来增强代码性能(其中一些会剥离注释)。因为注释是唯一有这种技术缺陷的规范,我不建议使用它
此外,在评论上写"功能性"的东西也很奇怪。
XML比YAML详细得多,但也更广为人知。XML的文档示例是所有选项中最差的。
YAML比其他任何一个都可读,但它也依赖于空间标识(有些人不喜欢)。Symfony默认情况下使用YAML进行配置,因此许多使用Symfony的人选择使用YAML来进行原则映射——这意味着YAML示例有很好的文档记录,并且有很多资源。
我个人更喜欢YAML。我可以使用条令模式工具自动生成实体(这意味着我不必编写getter/setter)。我还可以使用预编译器/字节码缓存选项,而不用担心注释被删除。
附加信息:
如果您使用的是PHP 7.0或更高版本,那么如果您使用注释,则永远无法在PHP.ini上设置opcache.save_comments = 0
。PHP有一种去除注释的原生方法,这将破坏您的应用程序。Guilherme Blanco是Doctrine最活跃的维护者之一,也是开发大多数项目使用的注释检索类的人(Doctrine,Symfony),他公开反对注释注释(如果你阅读整个帖子,你会发现他对此非常感兴趣)。关于Reddit上的评论注释问题,也有一些广泛的讨论,大多数人似乎都认为这是个坏主意。
尽管如此,Symfony的官方最佳实践书籍还是建议人们使用注释。因此,大多数Symfony捆绑包可能会使用注释作为元数据格式。
我认为这是我个人的喜好,我更喜欢注释。
我使用注释是因为如果你想了解字段的任何信息,或者你必须打开一个新文件并搜索你需要的规则。
最好的方法是创建两个案例。然后你看看你喜欢什么。