我经常听到人们的猛烈抨击中被不灵活和一种"漏水的抽象",但是你真的没听到 为什么 他们是有问题的。如果使用得当,究竟是什么错误的中?我问这个是因为我的工作PHP奥姆和我想用它来解决问题的很多其他中失败,例如懒惰的装载和缺乏子查询。

请具体说明你的答案。显示一些代码或描述了一个数据库方案在对象的斗争。不论语言或奥姆.

有帮助吗?

解决方案

一的我与我用的是只更新而无需首先检索对象几个字段的所有的ORM注意到更大的问题。

举例来说,假设我在我的数据库具有以下字段映射到的项目对象:ID,名称,描述,owning_user。比方说,通过Ajax,我只想更新描述字段。在大多数奥姆斯对我来说,更新数据库表,而只有具有ID和描述值的唯一办法是,要么从数据库检索的项目对象,设置描述,然后发送的对象回数据库(因此需要两个数据库操作只是因为一个简单的更新),或通过存储过程来更新它(这是我目前使用的方法)。

其他提示

对象和数据库记录真的是不是所有的类似。他们已经输入插槽,你可以存储的东西,但仅此而已。数据库比编程语言完全不同的概念认同。他们不能处理复合对象,所以你必须使用附加的表和外键来代替。大部分没有类型继承的概念。当映射到数据库世界导航对象的网络(遵循一些指针的一个对象,获得另一个对象,并再次取消引用)的自然的方式是效率要低得多,因为你必须做出多次往返和检索大量数据的,你没有在意。

在换言之:抽象不能进行在首位非常好;它不是ORM工具是坏的,但他们实施的比喻。取而代之的是完美的同构它是仅仅是一个表面上的相似,所以任务本身是不是一个很好的抽象。 (它仍然方式比不得不深刻理解数据库,但更为有用。对ORM工具的蔑视从数据库管理员看不起单纯的程序员来居多。)

的ORM也可以编写代码,效率不高。由于数据库性能是大多数系统的关键,他们可能会导致本来可以避免的,如果一个人写的代码(但可能没有任何更好,如果有问题的人不理解数据库性能调优)的问题。这是特别真实当查询变得复杂。

我觉得我与他们最大的问题是,虽然被抽象掉的细节,初级程序员越来越怎么写,他们需要能够处理边界情况和地方查询较少理解其中的ORM真题糟糕的代码。这真的很难去学习先进的东西,当你从未有过了解的基础知识。在别人谁了解连接和GROUP BY和高级查询手中的ORM是一件好事。在人谁不理解布尔代数和连接和一堆其他基本的SQL概念的手中,这是导致数据库和查询设计很差很糟糕的事情。

关系数据库是不对象,并且不应当被视为这样。试图让老鹰成丝钱包一般是不会成功的。远东更好地学习老鹰所擅长的,为什么让老鹰飞,而不是有一个坏的钱包和一个死鹰。

在我看来是这样的。使用一个奥姆,你必须从几个堆栈php功能,并随后连接到一个数据库,并基本上还运行一个MySQL查询或者类似的东西。

为什么所有的抽象之间代码和数据库?为什么我们不能只是使用我们已经知道的?通常一个网页开发人员知道他们的后台的语言,他们的db语言(某种SQL),以及某些种类的前端的语言,例如html,css,js,等等...

实质上,我们正在试图添加一个层的抽象,包括多功能(和我们所有人都知道php功能可以慢于分配变量)。是的,这是一个微计算,但是,它仍然增加了。

我们不仅现在有几个职能的去过,但我们还必须学习的方式的对象工作,因此有一些时间浪费在那里。我认为整个理念的分离的代码是保持你的代码分离在所有水平。如果你是在灯的世界,只是为你查询(你应该知道MySQL)和使用已经存在的php功能为准备发言。做!

灯的方式:

  • 创造查询(string);
  • 使用)的预准备的发言和检索数据,进入阵列。

奥姆的方式:

  • 运行的功能得到的实体
  • 它运行MySQL查询
  • 运行的另一个功能,增加了一个条件
  • 运行的另一个功能,增加了另一个条件
  • 运行的另一个功能加入
  • 运行的另一个功能,增加了条件在加入
  • 运行的另一功能做准备的
  • 运行的另一个MySQL查询
  • 运行的另一个功能,获取数据
  • 运行的另一个MySQL查询

没有人别的有一个问题与奥姆栈?我们为什么成为这样的懒惰的开发商?或者这样的创造性,我们正在损害我们的代码?如果没坏没有修复。反过来,修复开发团队了解的基础知识网络开发。

的ORM试图解决一个非常复杂的问题。有边缘的情况下嘉豪和主要的设计折衷没有明确的或明显的解决方案。当你优化的ORM设计情况的,你天生使其尴尬情况解决B中。

有是处理延迟加载和子在“足够好”的方式的ORM,但是这几乎是不可能的“足够好”到“伟大”来获得。

在设计你的ORM,你必须对所有可能的尴尬数据库相当不错的把手设计您的ORM将有望手柄。你必须明确地让周围的情况下,你愿意笨拙处理权衡。

我不看奥姆斯如不灵活或比一般的复杂抽象更多的泄漏。这就是说,某些奥姆斯是优于其他在这些方面。

好运重新发明轮子。

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