刚刚遇到了具有对象关系映射器和数据库抽象层的Doctrine项目。Doctrine 提供了其他 PHP 抽象层没有提供的什么?除了通过用 Doctrine Query Language 编写的查询来获取对象之外,您还能将 ORM 用于什么实际用途?查询语言真的是您想要开发整个网络应用程序的东西吗?它表现良好吗?
总体而言,在 Doctrine 上构建应用程序是否更易于维护和理解?它是否过度设计,是否建立在适合中小型项目的抽象层上?(<50 个 GUI 屏幕),而不是直接使用 MySQL。
刚刚遇到了具有对象关系映射器和数据库抽象层的Doctrine项目。Doctrine 提供了其他 PHP 抽象层没有提供的什么?除了通过用 Doctrine Query Language 编写的查询来获取对象之外,您还能将 ORM 用于什么实际用途?查询语言真的是您想要开发整个网络应用程序的东西吗?它表现良好吗?
总体而言,在 Doctrine 上构建应用程序是否更易于维护和理解?它是否过度设计,是否建立在适合中小型项目的抽象层上?(<50 个 GUI 屏幕),而不是直接使用 MySQL。
Doctrine 提供了其他 PHP 抽象层没有提供的什么?
查询语言真的是您想要开发整个网络应用程序的东西吗?
只是负责维护业务对象的应用程序的一部分应该知道 Doctrine 的存在。这部分不一定是 100% 基于教义的。
总体而言,在 Doctrine 上构建应用程序是否更易于维护和理解?
确实。代码更易于阅读、理解和维护。
它是否过度设计,是否适合中小型项目?
实际上,教义的基本原理非常简单。对于小型、中型甚至一些大型应用来说,它是一个非常好的选择。
教义不是万能的答案,有时它有点问题。然而,对于典型的任务,它非常有用。恕我直言,目前 PHP 的最佳 ORM/ODM。
我想为 Crozin 的回答补充几点,但遗憾的是无法发表评论。他们来了:
恕我直言,目前学说在所有可用的 php ORM 中提供了最好的 IDE 代码完成支持和 DB 层抽象。它没有过度设计并遵循 SOLID 原则。
我想为 GerKirill 的回答补充一点。缺乏对魔术 getter/setter 方法的支持是一个弱点,恕我直言,而不是优势。如果您曾经滚动浏览过几十页相同的 getter/setter,您会意识到这些方法非常浪费空间(更不用说编译时间了)。没有人会意外设置对象变量,而 setter 不会阻止您这样做......当您想要更改属性时,您只需调用 setter(setter 如何“保护”属性 - 如果您是要打错字并直接设置错误的属性值,您将打错字并调用错误的setter)。除了获取或设置属性之外,setter 或 getter 很少做任何事情。如果您必须做一些特殊的事情来设置或获取属性,http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html),或者你应该重构你的代码,或者你应该调用一个属性验证函数(通常在创建对象的时间)。这是困扰 OO 世界的那些无可争议的真理之一。在发布标准的接收智慧回复之前,请考虑一下。