php - 事件记录的目的是什么?

标签 php database activerecord codeigniter

我正在修补 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/

相关文章:

ruby-on-rails - ActiveRecord::Migrator.up() 的 Rails 5.2 替代方案

javascript - 如何在网页上显示数据库中的内容,以及如何允许用户选择更多信息

php - MySQL Fetch 在单个查询中连接具有多行的多个表

php - 为什么 Web 服务中的尾部斜杠如此重要?

database - 在 ORM 中, "lazy loading"是否意味着您可能无法从较大的列中获得预期的结果?

java - SQLServer express R2 的 JDBC 连接 Url

ruby-on-rails - Rails belongs_to has_many 与数据库条件

ruby-on-rails - 如何查找ActiveRecord ROLLBACK的原因

PHP preg_match 查找多次出现

php - 如何显示已选中的复选框并更新数据库