nev*_*ame 4 php sql orm frameworks
我知道网上已经有很多关于这个话题的帖子.
然而,许多人在谈论它时往往会关注不同的事情.我的主要目标是创建易于维护的可伸缩Web应用程序.开发和维护的速度远远超过原始性能(或者我可以使用Java).
这是因为我注意到当项目代码大小增长时,您必须具有可维护的代码.当我第一次以程序方式编写我的应用程序时,没有任何框架,它只在1个月后成为一场噩梦.我完全迷失在意大利面条代码行的丛林中.我根本没有任何结构,即使我努力实施一个.
然后我意识到我必须有正确的结构和代码.我开始使用CodeIgniter.这真的给了我结构和可维护的代码.许多用户说框架正在减慢速度,但我认为他们错过了这个画面.代码必须易于维护且易于理解.
Framework + OOP + MVC使我的Web应用程序结构化,以便添加功能不再是问题.
当我创建模型时,我倾向于认为它代表了一个数据对象.也许是一个表格甚至一个表/数据库.所以我想到了ORM(学说).也许这将是我的Web应用程序的另一个伟大的实现,给它更多的结构,所以我可以专注于功能而不是重复自己.
但是,我之前从未使用任何ORM,我只学习了它的基础知识,为什么它的使用效果很好等等.
所以现在我问你们所有像我一样的人都在努力寻找可维护的代码,并且知道这有多重要,ORM(doctrine)是否必须具备可维护代码,就像framework + mvc + oop一样?
我希望获得更多的生活经验建议而不是"原始sql更快"的建议,因为如果我只关心原始性能,我应该首先放弃框架+ mvc + oop并继续生活在编码噩梦中.
感觉它非常适合MVC框架,其中模型是表格.
现在我在一个文件中有150个sql查询,做一些简单的事情,比如通过id获取条目,按名称获取条目,通过电子邮件获取条目,通过X获取条目等等.我认为ORM可以减少这些行,否则我很确定将来会增长到1000 sql行.如果我改变一列,我必须改变所有这些!真是一场噩梦再次思考它.也许这也可以给我很好的模型,适合MVC模式.
ORM是采用结构和可维护代码的正确方法吗?
Ajsie,
我的投票是针对ORM.我使用NHibernate.它并不完美,并且有一个相当大的学习曲线.但代码更易于维护,更多OOP.除非你喜欢大量的重复代码,否则几乎不可能在没有ORM的情况下使用OOP创建应用程序.它肯定会消除你绝大多数的SQL代码.
而这是另一回事.如果您打算构建一个OOP系统,那么无论如何您最终都会编写自己的O/R Mapper.您需要调用动态SQL或存储过程,将数据作为读取器或数据集,将其转换为对象,将关系连接到其他对象,将对象修改转换为sql插入/更新等.您所写的将是比NHibernate更慢更多的错误或长期在市场上出现的东西.
您唯一的另一个选择是构建一个以数据为中心的程序性应用程序.是的,它可能在某些领域表现更快.我同意表现很重要.但最重要的是它的快速足够.如果你在这里和那里保存几毫秒的程序代码,你的用户将不会注意到性能的提高.但是你会注意到糟糕的代码.
ORM中最大的性能瓶颈是以预取和延迟加载对象的正确方式.这会导致ORM的n查询问题.但是,这些很容易解决.您只需要对对象查询进行性能调优并限制对数据库的调用次数,告诉它何时使用连接等.NHibernate还支持丰富的缓存机制,因此您根本不会访问数据库.
我也不同意那些表示性能与用户有关并且维护是关于编码员的人.如果您的代码不易维护,那么添加功能将会出错并且速度很慢.您的用户会关心这一点.
我不会说每个应用程序都应该有一个ORM,但我认为大多数都会受益.另外,不要害怕在必要时偶尔使用带有ORM的本机SQL或存储过程.如果您必须对数百万条记录进行批量更新或编写非常复杂的报告(希望针对单独的非规范化报告数据库),那么直接SQL就是可行的方法.将ORM用于OOP,事务,业务逻辑和CRUD,并将SQL用于异常和边缘情况.
我建议在NHibernate和Onion Architecture上阅读Jeffrey Palermo的内容.另外,参加他的敏捷训练营或其他课程来学习O/R Mapping,NHibernate和OOP.这就是我们使用的:NHibernate,MVC,TDD,依赖注入.
许多用户表示框架正在减慢速度,但我认为他们错过了大局.代码必须是可维护的,并且易于理解.
如果它的性能是Teh Suck,那么结构良好,高度可维护的系统就毫无价值!
可维护性是使构建应用程序的编码人员受益的东西.原始性能有益于将应用程序用于其工作(或其他)的真实人员.那么,他们的关注应该是最重要的:构建系统的人还是那些付钱的人?
我知道这并不是那么简单,因为客户最终会为结构不合理的系统付出代价 - 可能是更多错误,肯定有更多时间来修复它们,有更多时间来实现应用程序的增强功能.通常情况下,一切都是权衡.