【问题标题】:Difference between Active Record and DAO?Active Record 和 DAO 的区别?
【发布时间】:2011-10-02 05:13:26
【问题描述】:

数据访问对象和 Active Record 有什么区别?它们看起来完全一样,都在应用程序和持久层之间构建了一个层,并使用 SQL 查询抽象出直接数据库访问。

【问题讨论】:

    标签: activerecord dao


    【解决方案1】:

    数据访问对象 (DAO) 是专用于将模型/域对象持久化到数据源的接口。这是reference

    ActiveRecord 模式以类似的方式工作,但将持久性方法放在模型对象本身上,而 DAO 定义了一个离散接口。

    DAO模式的优点是:

    • 很容易定义另一种持久性风格,例如从数据库迁移到云,而不改变底层实现,而外部接口保持不变,因此不会影响其他类。

    • 持久性关注点被模块化,远离主要的模型对象关注点。

    ActiveRecord 模式的优点是简单。

    【讨论】:

    • 我认为您的第一个项目符号不准确。也许在某些实现中,但在其他实现中,完全有可能在不更改接口的情况下更改持久性机制(即使在运行时)relationdb、平面文件或 Web 服务......尤其是如果该接口设计得很好(即它只是创建、读取,更新,删除)。不同之处在于(同样,取决于实现......因为这些特征可以与多种语言混合......)
    • @Mainguy 是的,如果该语言提供轻松和动态(非静态)的混合,那么 ActiveRecord 已经可以实现 DAO 目标。
    • 我认为值得注意的是ActiveRecord本质上是一个被DAO取代的遗留模式。
    • @AmirAbiri 谁说ActiveRecord 本质上是一种遗留模式?许多框架仍然使用它。例如,Ruby on Rails、Mongoose、Sequelize、Django 等。
    【解决方案2】:

    数据访问对象 (DAO) 是指数据层中负责在域中持久保存单独实体的对象。 Active Record 是一种执行 DAO 的特定方法,其中包含表中单行值的类还负责对该表的查询、更新、插入和删除。 Active Record 设计模式意味着您的对象与数据库中的表具有一对一的映射关系。

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 1970-01-01
      • 2016-11-28
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多