我遇到了几个最近宣布他们计划将其实施从Active Record转移到Data Mapper的ORM。我对这个主题的了解非常有限。对于那些了解得更好的人来说,问题是Data Mapper比Active Record更新吗?当Active Record运动开始时它是否存在?这两者如何联系在一起?
最后,由于我不是一个数据库人并且对这个主题知之甚少,我是否应该遵循正在转向Data Mapper实现的ORM,就像我作为编写软件的人(不是数据人)的内容一样?
答案 0 :(得分:21)
DataMapper不是更现代或更新,但更适合ORM。
人们改变的主要原因是ActiveRecord does not make for a good ORM。 AR 在数据库表或视图中包装一行,封装数据库访问,并在该数据上添加域逻辑。因此,根据定义,AR是数据库记录的1:1表示,这使得它特别适用于简单的CRUD。
一些AR增加了相关数据的获取,这让人们相信AR是一个ORM。它不是。 ORM的要点是解决数据库结构和域对象之间的object relational impedance mismatch问题。使用AR时,您无法解决此阻抗不匹配问题,因为您的AR代表数据库行而不是正确的OO设计。您正在将数据库布局绑定到对象。一些对象关系行为模式仍然可以应用(例如延迟加载)。
AR经常被批评的另一个原因是它混淆了两个问题:业务逻辑和数据库访问逻辑。这导致不希望的耦合,并且可能导致较大应用中较少的可维护性和灵活性。两层之间没有隔离。耦合总是导致灵活性降低。
另一方面,DataMapper 在对象和数据库之间移动数据,同时保持它们彼此独立以及映射器本身。虽然更难实现,但它允许更多灵活的设计在您的应用中。您的域对象不再必须与db结构匹配。 DAL和Domain层是分离的。