我正在修补 CodeIgniter,第一次接触到 Active Records。起初我认为它适合那些并不真正了解如何编写 SQL 的人。我现在意识到我的分析是有缺陷的,而 Active Records 非常突出,尤其是在 Rails 中。
但是 Active Records 的用途是什么?是从不同的 RDBMS 个性中抽象出来。如果是这样,我认为那不是 SQL 的目的。此外,什么是最佳实践,我应该使用这些吗?
提前致谢
最佳答案
Active Record 是一种用于数据访问的设计模式...
目前我似乎遇到了两种关于数据访问的主要设计模式:ActiveRecord 和 Repository 模式
事件记录
您的对象包含将其状态持久化到数据库(或其他持久性机制)的方法,因此:
您可能有一个 Customer 对象。
Customer 对象会有很多方法,比如 Customer.Save();, Customer.Get(int id);和别的。
这些方法实际上与现实世界中的客户没有任何关系。它们实际上与您的应用程序的基础设施有关。
存储库模式
在存储库模式中,您的客户对象将是一个 POCO,即哑对象。它只有表示客户真正需要的方法和属性(例如姓名、电子邮件地址、列表订单等)
当您想保留客户时 - 您只需将其传递到您的存储库
Repository.Save(MyCustomer).
事件记录模式使用起来既快捷又容易。不幸的是,它确实用这些与客户没有任何关系的方法弄乱了您的域模型。随着时间的推移,这使得维护您的领域模型变得稍微困难一些。
对于很多情况,使用事件记录模式是非常合适的。例如 - 如果我正在编写一个可能不会有太大变化的相当简单的应用程序,我可能会启动 SubSonic 并生成我的 Active Record DAL。我会在 20 分钟内编写我的业务代码,所有数据库的东西都已经处理好了。
另一方面,如果我正在为一个特别复杂的领域建模,并且很容易发生变化,我宁愿保持我的领域模型干净,并使用 nHibernate 或类似的工具实现存储库模式......
我已经很长时间没有使用 ADO.Net 进行自己的数据访问了,现在我真的不推荐它,因为有这么多很棒的数据访问工具可用。
关于php - 事件记录的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1404405/