`

ActiveRecord是什么&元编程简介

阅读更多

回复:什么是ActiveRecord

ActiveRecord 是什么:
1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD;
3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;

ActiveRecord 不是什么:
1. Row Data Gateway
Row Data Gateway模式中每个对象也封装了数据库记录的状态和持久化到数据库的访问方法; 这两个有时候很难区分. 细微的区别在于Row Data Gateway不封装任何业务逻辑;

2. TableGateway
TableGateway是一种数据访问模式, 对每个表有一个类, 类的方法封装了对单个表的数据操作, 如CRUD; 方法的接受表字段的值作为参数;
比如说对表Person有DAOPerson, 有以下方法:
int Create(string name, bool isMale)
DataSet Find(int personId)
void Delete(int personId)
void Update(int personId, string name, bool isMale)
微软的很多代码示例中使用了此模式;

ActiveRecord的区别在于ActiveRecord的对象中保持了记录的值, 是有状态的, 而TableGateway是没有状态的, 只是一系列数据库访问方法的集合;

3. Table Module
Table Module是一种领域逻辑模式, 一个类对应于数据库中的一个表; Table Module通常和Table Gateway合作, 前者负责基本的业务逻辑, 后者负责数据库访问, 以达到逻辑层和持久化层的隔离; 微软的实例代码经常使用这两者, 如对表Person, 通常会定义两个类, PersonBL和PersonDB, 在PersonBL中处理验证等逻辑, 并调用PersonDB访问数据库, 层间调用使用DataSet或自定义数据传输对象传输数据

在业务逻辑比较简单并且有和表的一一对应时, ActiveRecord相对来说更简单, 因为它在一个类中包括了业务逻辑对象和数据访问, 而且不需要数据传输对象, 减少了维护的工作量;
和Table Module比较起来, ActiveRecord与数据库耦合更紧;

ActiveRecord 适用于:
1. 业务逻辑比较简单;当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的, 即你的业务逻辑大多数是对单表操作;

2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script), 把跨表事务提升到事务脚本中;

3. ActiveRecord最大优点是简单, 直观; 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了;

4. 这些优点使ActiveRecord特别适合web快速开发, 而正是快速开发框架ROR采用了ActiveRecord, 并且很多类ROR框架如Castle的纷纷效仿才使ActiveRecord重新进入大家视线;
我想这也是为什么Martin Fowler在PoEAA中早就提出了这个模式, 但是直到最近两三年ActiveRecord才热起来可能就是这个原因;

ActiveRecord 不适合于
1. ActiveRecord虽然有业务逻辑, 但基本上都是基于单表的. 跨表逻辑一般会放到当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script)中. 如果对象间的关联越来越多, 你的事务脚本越来越庞大, 重复的代码越来越多, 你就要考虑Domain Model + O/R Mapper了;

2. ActiveRecord保存了数据, 使它有时候看上去像数据传输对象(DTO). 但是ActiveRecord有数据库访问能力, 不要把它当DTO用. 尤其在跨越进程边界调用的时候, 不能传递ActiveRecord对象;

 

 

元编程艺术,第 1 部分: 元编程简介

目前应用最广泛的技术之一是编写生成其他程序或部分程序的程序。因此十分有必要学习为什么要采用元编程,以及元编程都有哪些组件(文本宏语言,专用代码生成器)。在本文中,您将学习到如何构建一个代码生成器,并详细了解如何使用 Scheme 编写对语言敏感的宏。

用来生成代码的程序有时被称为 元程序(metaprogram) ;编写这种程序就称为 元编程(metaprogramming) 。编写这种输出代码的程序可以有无数的应用。

本文将介绍为什么会考虑进行元编程,并介绍这种技术的一些组件 —— 我们将深入介绍文本宏语言(textual macro language),了解专用的代码生成器,并讨论如何构建这些工具,最后研究如何使用 Scheme 编写对语言敏感的宏。

元编程的不同用法

首先,可以编写一些程序来提前生成一些数据供运行时使用。例如,如果您正在开发一个游戏,并且希望使用一个所有 8 位整数的正弦值的查询表,既可以每次都执行正弦计算的操作,也可以让程序在启动时构建这样的一张表在运行时使用,或者编写一个程序在编译之前为这个表生成 定制代码。尽管对于少量的数据来说在运行时构建这张表是可能的,但是有些任务则可能会使得程序启动非常缓慢。在这种情况中,编写一个程序来构建一张静态表 通常是最好的解决方案。

其次,如果您有一个很大的应用程序,这个程序有很多函数都包括了很多样板文件,那么就可以创建一个小型的语言,它可以生成这些样板代码,让您可以只 实现重要的部分。现在,如果可以,最好是能够将这些样板部分抽象成一个函数。但是通常来说,这些样板代码并不会如此精美。可能每个实例中都需要声明一些变 量,可能需要注册错误处理程序,或者有一些样板文件必须在某些情况中插入一些代码。所有这些都使得简单的函数调用是不可能的。在这种情况中,通常创建一个 小型的语言来更简单地利用样板文件的代码。这种小型的语言可以在编译之前被转换成普通的源代码语言。

最后,有很多编程语言都可以编写非常复杂的语句来真正实现一些功能。代码生成程序可以对这种语句进行简化,并节省很多输入的工作,这可以防止大量的输入错误,因为减少了很多输入错误内容的机会。

作为语言可以有很多特性,代码生成程序就不需要这么多了。一种语言中的标准特性在另外一种语言中可能只能通过代码生成程序实现。然而,语言设计不充分并不是需要代码生成程序的唯一原因。维护简单也是一个原因。

分享到:
评论

相关推荐

    ActiveRecord简单实例_activerecord.zip

    在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...

    元编程 Ruby

    Rails的ActiveRecord模型就是通过元编程来实现其魔法般的动态方法生成,例如,我们可以直接对模型使用find_by或where等方法,而这些方法在Ruby代码中是不存在的,它们是在运行时动态生成的。Rails的路由系统、视图...

    NHibernate中文教程+activerecord

    它是一个AOP(面向切面编程)框架,能够自动管理对象的生命周期,包括事务、验证和持久化。 9. **最佳实践** 在实际应用中,需要注意避免N+1查询问题,合理设计对象关系,以及正确使用缓存策略。另外,理解何时...

    [IronRuby] C# 4.0调用ActiveRecord

    IronRuby与Ruby一样支持动态类型系统、元编程和Ruby on Rails框架。 知识点二:C# 4.0 C# 4.0是微软公司开发的面向对象的编程语言,它是.NET框架的一部分。C# 4.0引入了动态类型(dynamic),协变和逆变,可选参数...

    scala-activerecord-specs_2.9.2-0.2.3.zip

    2. **ORM(对象关系映射)**: ORM是编程中的一种技术,它通过在对象模型和关系数据库之间建立映射,让开发者可以使用面向对象的方式来操作数据库,而不需要直接写SQL语句,降低了数据库操作的复杂性。 3. **...

    Caste ActiveRecord

    Caste ActiveRecord 是一个基于.NET框架的轻量级对象关系映射(ORM)工具,它简化了数据库操作,允许开发者使用面向对象的编程方式与数据库进行交互。Caste ActiveRecord 是对ActiveRecord模式的一种实现,该模式...

    Ruby-OccamsRecord缺少ActiveRecord的高效查询API

    Ruby是一种动态、面向对象的编程语言,而ActiveRecord是Ruby on Rails框架中的一个核心组件,它是一个对象关系映射(ORM)系统。ActiveRecord提供了一种简洁的方式将数据库操作与Ruby对象模型化,使得开发者可以方便...

    Ruby on Rails中的ActiveRecord编程指南

    ### Ruby on Rails中的ActiveRecord编程指南 #### 一、引言 在Ruby on Rails框架中,ActiveRecord是一种用于实现数据库抽象层的对象关系映射(ORM)工具。它为开发人员提供了一种简单而强大的方式来处理数据库记录...

    Castle ActiveRecord 2.0

    Castle ActiveRecord 支持 AOP(面向切面编程)风格的事务管理,可以使用 `TransactionAttribute` 来标记事务边界,或者在代码中使用 `Session.BeginTransaction()` 和 `Session.CommitTransaction()` 手动控制。...

    Apress Pro ActiveRecord Databases with Ruby and Rails.pdf

    #### 二、ActiveRecord简介 **ActiveRecord**是Ruby on Rails框架中的核心组件之一,它实现了ORM的概念,允许开发者以面向对象的方式处理数据库记录。通过ActiveRecord,开发者可以轻松地创建、读取、更新和删除...

    ASP.NET-[其他类别]ActiveRecord简单实例.zip

    ASP.NET是一种由微软开发的服务器端Web应用程序框架,它允许开发者使用.NET Framework和各种编程语言(如C#或VB.NET)来构建动态网站、Web应用和Web服务。在这个"ASP.NET-[其他类别]ActiveRecord简单实例.zip"压缩包...

    Python-ActiveRecord类似Django的查询嵌套式加载和美化reprforSQLAlchemy

    总结,这个主题主要展示了如何在SQLAlchemy中实现类似于Active Record的编程风格,包括如何定义模型、使用Session查询数据、实现嵌套加载以优化性能,以及通过重写`__repr__`方法和使用Mixins来提升代码的可读性和可...

    PetShop_Model_DAL.rar_CASTLE_Castle mod_activeRecord_castle d

    它的核心思想是将对象关系映射(ORM)功能与面向对象设计原则相结合,使得开发者能够使用类似于ActiveRecord模式的编程风格来处理数据库操作。这种模式下,每个数据库表都有一个对应的类,类中的每个属性对应表中的...

    基于ASP的实现ActiveRecord数据查询更新 v1.0.zip

    ActiveRecord是面向对象编程中的一个设计模式,它将数据库表的记录映射到类的对象,使得操作数据库就像操作对象一样简单。在ASP环境中,使用ActiveRecord可以极大地简化数据库交互,提高代码的可读性和可维护性。...

    Python-OratorORM提供了一个简单而优美的ActiveRecord实现

    这个库深受Laravel框架数据库组件的启发,但针对Python语言的特点进行了优化,使其更加符合Python的编程习惯。 首先,让我们了解一下ActiveRecord模式。ActiveRecord是一种设计模式,它将数据库表的记录映射到对象...

    ASP源码—实现ActiveRecord数据查询更新 v1.0.zip

    3. **ActiveRecord模式**:在面向对象编程中,ActiveRecord模式将单个数据库表映射到一个类,每个类实例代表表中的一个记录。这样,你可以通过对象的方法来执行CRUD(创建、读取、更新、删除)操作,而无需直接编写...

    Ruby-Rein让ActiveRecord支持数据库约束

    标题 "Ruby-Rein让ActiveRecord支持数据库约束" 暗示了一个关于Ruby开发中的一个库,名为Rein,它的目标是增强ActiveRecord的功能,使其能够更好地处理数据库约束。ActiveRecord是Ruby on Rails框架中用于对象关系...

    PHP 库通过返回原始 SQL 来实现 ActiveRecord

    在PHP编程中,ActiveRecord是一种常见的对象关系映射(ORM,Object-Relational Mapping)模式,它使得开发者可以像操作对象一样操作数据库记录。在这个场景中,标题提到的"PHP 库通过返回原始 SQL 来实现 ...

    十几种编程语言的技术文档集合

    7. **Ruby**:Ruby语言以其优雅的语法和Rails框架著名,文档可能包含Ruby基础、元编程、Rails框架的使用、ActiveRecord等。 8. **Go**:Google开发的高性能系统编程语言,其文档可能涉及Go的基础语法、并发编程、...

    Ruby-marginalia添加评论至ActiveRecord的SQL查询

    Ruby是一种动态、面向对象的编程语言,而ActiveRecord是Ruby on Rails框架中的一个核心组件,它作为ORM(Object-Relational Mapping)工具,使得开发者可以用Ruby代码操作数据库,无需直接编写SQL语句。ORM框架的...

Global site tag (gtag.js) - Google Analytics