刚遇到 教义 具有对象关系映射器和DB抽象层的项目。学说提供了其他PHP抽象层没有的内容?除了通过以学说查询语言编写的查询获取对象外,您还可以将ORM放置在哪些实际用途?查询语言真的是您要开发整个Web应用程序的东西吗?表现良好吗?

总的来说,在学说上构建应用程序是否会更容易维护和理解?它是否过度工程,并且在小型项目中明智的抽象层建设? (<50 GUI屏幕),而不是直接与MySQL合作。

有帮助吗?

解决方案

学说提供了其他PHP抽象层没有的内容?

  1. 实现DatamApper模式而不是ActiverEcord。
  2. 支持 注释, ,XML和YAML用于模式。
  3. 用途 DQL.
  4. 使用PHP 5.3+的好处。
  5. 快速并且有庞大的社区。
  6. 除了ORM,还有ODM。

查询语言真的是您要开发整个Web应用程序的东西吗?

负责维护业务对象的申请的一部分应意识到学说的存在。而且该部分不必是100%基于学说的。

总的来说,在学说上构建应用程序是否会更容易维护和理解?

确实。该代码易于阅读,理解和维护。

它是过度设计的吗?对于中小型项目是否明智?

实际上,学说的基本面非常简单。对于中小型,中等甚至一些大型应用程序,这是一个很好的选择。


学说不是一切的答案,有时有点问题。但是,对于典型的任务,这非常有用。恕我直言,目前是PHP的最佳ORM/ODM。

其他提示

我想为Crozin的答案添加几点,但不幸的是无法评论。他们来了:

  • 学说不使用魔法方法__get()和__set()访问实体属性,所有实体属性都应具有getter / setter。这可以改善IDE代码的完成,您无需始终查看DB表结构。
  • 学说从真实的表字段名称中完全抽象您。一旦将实体属性映射到DB字段 - 您可以在任何地方使用属性名称。表名相同。
  • 学说使用的存储库模式隐藏了获得实体的细节。
  • 学说使用“代码第一”方法,因此您可以先创建实体,然后自动为其生成数据库。反向情况也是可能的。
  • 学说具有功能强大的查询构建器,因此您可以利用构建器图案进行有条件零件的查询。
  • 学说使用外键和约束来执行级联动作并保持数据一致。
  • Doctrine的Unitofwork是一件非常伟大且聪明的事情,在其他PHP ORMS中没有类似物

目前,IMHO学说在所有可用的PHP ORM中提供了最佳的IDE代码完成支持和DB层抽象。它不是过分设计的,并且遵循坚实的原则。

我想对Gerkirill的答案增加一点。缺乏对魔术getter/setter方法的支持是一个弱点,恕我直言,而不是力量。如果您曾经浏览过数十页相同的Getter/setter,您会意识到这些方法是浪费空间的巨大浪费(更不用说编译时间)了。没有人意外地设置对象变量,而设置器不会阻止您这样做...当您想更改属性时,您只需调用设置器(如果您是设置器,则如何“保护”属性 - 如果您是要制作错字并直接设置错误的属性值,您将制作相同的错字并调用错误的设置器)。除了获取或设置属性外,二传手或Getter做任何其他事情都是非常罕见的。如果您必须做一些特别的事情来设置或获得财产,则该属性应该是一种方法(请参阅 http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html),或者您应该重构代码,否则您应该调用属性验证功能(通常在创建对象时)。这是困扰着OO世界的不受挑战的truism之一。在发布标准接收委员会回复之前,请考虑一下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top