刚遇到Doctrine Project,它有一个Object Relational Mapper和一个DB Abstraction Layer。 Doctrine提供的其他PHP抽象层不是什么?除了通过使用Doctrine查询语言编写的查询获取对象之外,还有什么实际用途可以放置ORM?查询语言真的是您想要开发整个Web应用程序吗?它表现良好吗?
总的来说,在Doctrine上构建应用程序是否更容易维护和理解?它是否过度设计,并且正在构建一个适合中小型项目的抽象层? (< 50 GUI屏幕),而不是直接使用MySQL。
答案 0 :(得分:15)
Doctrine提供的其他PHP抽象层不是什么?
您的查询语言是否真的需要开发整个Web应用程序?
负责维护业务对象的应用程序的一部分应该知道Doctrine的存在。而那部分不一定是100%基于学说。
总的来说,在Doctrine上构建应用程序是否更容易维护和理解?
当然。代码更易于阅读,理解和维护。
是否过度设计,对中小型项目是否合理?
实际上,Doctrine的基本原理非常简单。对于小型,中型甚至一些大型应用来说,它是一个非常好的选择。
学说不是一切的答案,有时候它有点问题。但是对于典型的任务,它非常有用。恕我直言,此时PHP的最佳ORM / ODM。
答案 1 :(得分:2)
我想对Crozin的回答补充几点,但遗憾的是无法发表评论。他们在这里:
答案 2 :(得分:0)
我想补充一下GerKirill的回答。没有对魔术吸气剂/二传手法的支持是一个弱点,恕我直言,而不是力量。如果你曾经浏览过几十页相同的getter / setter,你会发现这些方法浪费了大量的空间(更不用说编译时间了)。没有人不小心设置了一个对象变量,而一个setter并没有阻止你这样做...当你想要改变属性时,你只需要调用setter(如何设置者“保护”属性 - 如果你是打个拼写错误并直接设置错误的属性值,你会犯同样的拼写错误并调用错误的setter)。除了获取或设置属性之外,setter或getter除了做任何其他事情之外是非常罕见的。如果你必须做一些特别的事情来设置或获取属性,那么该属性应该是一个方法(参见http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html),或者你应该重构你的代码,或者你应该调用属性验证函数(通常在创建对象的时间)。这是困扰OO世界的那些毫无挑战的老生常谈之一。在发布标准的接收智慧回复之前,请考虑一下。