我遇到过几个 ORM,它们最近宣布计划将其实现从 Active Record 迁移到 Data Mapper。我对这个主题的了解非常有限。那么对于那些更了解的人来说一个问题是,Data Mapper 比 Active Record 更新吗? Active Record 运动是在这个时候开始的吗?两者如何联系在一起?
最后,由于我不是数据库人员并且对这个主题知之甚少,我是否应该遵循转向数据映射器实现的 ORM,就像作为编写软件的人(而不是数据人员)对我来说有什么好处?
DataMapper 并不是更现代或更新,只是更适合 ORM。
人们改变的主要原因是活动记录 http://martinfowler.com/eaaCatalog/activeRecord.html 并不能成为一个好的 ORM http://kore-nordmann.de/blog/why_active_record_sucks.html. An AR 将行包装在数据库表或视图中,封装数据库访问,并在该数据上添加域逻辑。因此,根据定义,AR 是数据库记录的 1:1 表示,这使得它特别适合简单的 CRUD。
一些AR增加了相关数据的获取,这让人们相信AR是一个ORM。它不是。 ORM 的重点是解决对象关系阻抗失配 http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch数据库结构和域对象之间。使用 AR 时,您无法解决这种阻抗不匹配问题,因为您的 AR 代表数据库行而不是正确的 OO 设计。您将数据库布局与对象联系起来。不过,一些对象关系行为模式仍然可以应用(例如延迟加载)。
AR 经常受到批评的另一个原因是它混合了两个问题:业务逻辑和数据库访问逻辑。这会导致不必要的耦合,并可能导致大型应用程序中的可维护性和灵活性降低。两层之间没有隔离。耦合总是会导致灵活性降低。
A 数据映射器 http://martinfowler.com/eaaCatalog/dataMapper.html另一方面在对象和数据库之间移动数据,同时保持它们彼此独立以及映射器本身独立。虽然实现起来比较困难,但它允许在您的应用程序中进行更灵活的设计。您的域对象不再需要与数据库结构匹配。 DAL 和 Domain 层是解耦的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)