我遇到了几个最近宣布计划将其实现从活动记录转移到数据映射器的ORM.我对这门学科的知识非常有限.所以,对于那些更了解情况的人来说,数据映射器比活动记录更新吗?活动唱片运动开始的时候是吗?这两者是如何联系在一起的?
最后,由于我不是数据库人员,对此主题知之甚少,我是否应该遵循正在迁移到Data Mapper实现的ORM,就像作为编写软件的人(而不是数据人员)对我有什么好处一样?
我遇到了几个最近宣布计划将其实现从活动记录转移到数据映射器的ORM.我对这门学科的知识非常有限.所以,对于那些更了解情况的人来说,数据映射器比活动记录更新吗?活动唱片运动开始的时候是吗?这两者是如何联系在一起的?
最后,由于我不是数据库人员,对此主题知之甚少,我是否应该遵循正在迁移到Data Mapper实现的ORM,就像作为编写软件的人(而不是数据人员)对我有什么好处一样?
DataMapper并不更现代或更新,只是更适合ORM.
人们改变的主要原因是因为ActiveRecord does not make for a good ORM.AR wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.所以根据定义,AR是数据库记录的1:1表示,这使得它特别适合于简单的CRUD.
一些AR增加了对相关数据的提取,这让人们相信AR是一种ORM.不是的.对象关系管理的要点是在您的数据库 struct 和域对象之间撞击object relational impedance mismatch.使用AR时,您无法解决此阻抗不匹配问题,因为您的AR表示的是数据库行,而不是正确的OO设计.您正在将数据库布局绑定到对象.但是,仍然可以应用一些对象关系行为模式(例如,延迟加载).
AR经常受到批评的另一个原因是它混合了两个问题:业务逻辑和数据库访问逻辑.这会导致不需要的耦合,并会降低大型应用程序的可维护性和灵活性.这两层之间没有隔离.耦合总是导致灵活性降低.
A DataMapper另一方面,moves data between objects and a database while keeping them independent of each other and the mapper itself.虽然实现起来比较困难,但它允许在您的应用程序中进行更灵活的设计.您的域对象不再需要与数据库 struct 匹配.DAL和域层是解耦的.