艾伟:小巧优美的ORM框架-doodads入门指南[转载]

  关于.net下的ORM框架,大家最为耳熟的可能就是NHibernate了,当然,很多公司正在使用自己开发的ORM框架,笔者至少见过3家不同公司的ORM框架,其实都是大同小异,借助于codesmith、mygeneration等代码生成工具,自己开发一个ORM框架也不是什么难事,关键的问题是,你能不能设计出代码优美简洁、功能灵活、定制方便以及部署容易的ORM框架。

  我去年开始热衷NHibernate(与其说热衷,不如说是迷信,因为后来越来越多的证据证明,公司自己的那套用了几年的使用Excel生成实体类的ORM小框架更加适合快速开发,并且灵活易定制),因为当时很多人讨论NH,有的公司招聘的时候也说会NH优先,当时花了几个小时才配置成功,又是搞codesmith的破解版,又是生成xml model,并且对其繁杂的关系机制感到恐惧,比如外键的配置,视图的配置,而我更习惯在数据库中把关系弄好,建立表、视图、约束、索引和存储过程,而不想把这些事情交给NHibernate来做,但是它却功能太强大,什么都愿意为你做,什么都能做。另外我感觉它封装的很深,我有时候不知道他从数据库加载了多少条记录,存储在哪里,如果再讨论它的缓存机制,更加令人头疼?

  为什么没有一种部署容易、代码优美、功能不强但是可以灵活定制、封装的恰到好处、轻量级的ORM呢?这个问题一直残绕在我心中,直到我使用了my generation(以下简称为mg,为什么我会尝试使用mg呢,是因为它开源而且免费,而且更容易上手)自带的doodads,当时觉得这个名字很奇怪晦涩,因此想当然地认为这套框架肯定和它的名字一样令人费解,不过抱着试试看的态度我深入了解了doodads,发现它的代码真的是很简单,很优美,貌似功能也不错,且看如下的代码:

// 获取并修改某条记录
Employees emps =new Employees();
if(emps.LoadByPrimaryKey(42))
{
    emps.LastName ="Just Got Married";
    emps.Save();
}

// 插入新纪录
Employees emps =new Employees();
emps.AddNew();
emps.FirstName ="Mr.";
emps.LastName ="dOOdad";
emps.Save();

// 插入新纪录后获得新纪录的主键
int i = emps.EmployeeID;

 这是多么简洁易读的、令人亲切的代码!

   接下来我将重点介绍doodads的基础知识,按照官方的说法,doodads支持如下的数据库系统:Microsoft SQLOracle, Firebird, Access, PostgreSQL, VistaDB, SQLite, and MySQL ,我在oracle 10g以及sql server 2000上有过成功的应用,但是在sql 2005下使用mg生成出来的代码编译通不过,不过你可以手动修改,添加合适的ado.net类型即可(按照编译出错的提示)。

一、doodads的demo

  首先请安装MyGeneration 1.3或以上版本,这是开源免费的,您无需为注册码焦头烂额,下载地址是:http://www.mygenerationsoftware.com/,下载之后安装,然后在安装目录下会找到如下的项目:

使用vs2005或更高版本打开“dOOdad_Demo_2005.sln”,注意您是否安装了sql server2000,因为这个demo用到了Northwind数据库,尝试运行该项目,若报数据库连接字符串需要修改,请修改web.config中的appSettings.dbConnection节,运行成功后出现如下的画面:

现在我们再来仔细看下一个典型的doodads项目的结构,是的,就是这么简单:

二、自己搭建一个基于doodads的项目

  1. 首先,您必须准备一个数据库,本文的例子是基于sql server 2000的,数据库中至少准备一个表,当然有视图或者存储过程可以使您体验到更多的东西
  2. 现在建立一个asp.net web应用程序,添加对“E:\Program Files\MyGeneration13\Architectures\dOOdads\CSharp\dOOdad_Demo\dOOdad_Demo_2005.csproj”(当然您需要修改这个地址为您的电脑上的mg安装路径)的引用,并且在web.config中的appSettings下建立dbConnection节,value就是您的数据库连接字符串
  3. 建立App_Code/DAL文件夹,或者您新建一个名为DAL的类库也行;
  4. (可选)建立App_Code/BLL文件夹,或者新建一个名为BLL的类库也行;
  5. 现在启动mg,打开并启动如下的模板(红框内的模板是必须的):

    这里四个模板分别表示:
    Invoke a stored procedure - 生成调用存储过程的c#类,若有则生成
    Business Entity - 您可以理解为生成表的操作类,这是最基本的类
    Business View-视图操作类,如果您有视图则生成
    Concrete Class-聚合类(请饶恕我的翻译),这里生成的类会对应继承是Business Entity中的类,可以理解为BLL类,可以将业务逻辑和DAL隔开,

    生成的Business Entity类或stored procedure或Business view请放到刚才建立的DAL文件夹中或者DAL类库中
    (若有)生成的Concrete Class请放到BLL文件夹或BLL类库

  6. 当然还需要一些引用或其他配置之类的,比如您的web app项目要引用DAL类库和BLL类库,视您的项目搭建情况而定
  7. 现在编译一下,是不是成功了!
  8. 编译成功了,不代表能够运行成功,如果您尝试执行类似如下的语句将会报错:
    Employees emps =new Employees();
    emps.LoadByPrimaryKey(42);
    错误原因是找不到“proc_您的表名LoadByPrimaryKey”存储过程”,于是我们发现了一个doodads的新特点,所有的CRUD操作都是通过存储过程实现的,如果您喜欢在数据库中做更多的事情,这是一个让您喜欢doodads的理由
  9. 生成CRUD存储过程,现在打开mg中的如下模板:


    运行后会为您选中的所有表分别生成CRUD(create、read、update、delete)存储过程,包括:
    '  1) proc[表名]LoadByPrimaryKey  (如果至少有一个主键)
    '  2) proc[表名]LoadAll(加载符合条件的所有记录)
    '  3) proc[表名]Update
    '  4) proc[表名]Insert
    '  5) proc[表名]Delete
    注意:现在生成的是sql文件,而不再是cs代码,请把生成的sql文件在数据库中执行生成相应的procedure

  10. 现在再运行本项目,不会再提示找不到存储过程了吧!

 

 总结:个人认为doodads的特点有以下几点:

  1. 基于存储过程,性能更卓越,灵活性更强
  2. 部署非常简单,引用dll生成dal类即可,不像nhibernate那么多配置;简单的基于doodads的项目仅仅需要几个business entity即可
  3. 封装的比较浅,您可以很清晰地得知doodads在干什么
  4. 提供的接口优美简洁

下一节将讲述doodads的主要接口的用法,这里提供一份指南下载,英文版的pdf格式:/Files/xiehuiqi220/doodadsQuickRefCSharp.pdf

 转自博友:xiehuiqi220

时间: 2024-09-14 13:49:16

艾伟:小巧优美的ORM框架-doodads入门指南[转载]的相关文章

小巧优美的ORM框架-doodads入门指南

关于.net下的ORM框架,大家最为耳熟的可能就是NHibernate了,当然,很多公司正在使用自己开发的ORM框架,笔者至少见过3家不同公司的ORM框架,其实都是大同小异,借助于codesmith.mygeneration等代码生成工具,自己开发一个ORM框架也不是什么难事,关键的问题是,你能不能设计出代码优美简洁.功能灵活.定制方便以及部署容易的ORM框架. 我去年开始热衷NHibernate(与其说热衷,不如说是迷信,因为后来越来越多的证据证明,公司自己的那套用了几年的使用Excel生成实

Python中编写ORM框架的入门指引

  这篇文章主要介绍了Python中编写ORM框架的入门指引,示例代码基于Python2.x版本,需要的朋友可以参考下 有了db模块,操作数据库直接写SQL就很方便.但是,我们还缺少ORM.如果有了ORM,就可以用类似这样的语句获取User对象: ? 1 user = User.get('123') 而不是写SQL然后再转换成User对象: ? 1 2 u = db.select_one('select * from users where id=?', '123') user = User(*

Google自动编程框架AutoML入门指南

本文讲的是Google自动编程框架AutoML入门指南, 前言 本篇是和Kabuto_hui(ISN国家重点实验室成员)合作修改生成的,感谢Kabuto_hui. 导读 Google在AI First的战略下,陆续发布AI相关的产品,技术.据最新的报道:Google AutoML 系统自主编写机器学习代码,其效率在某种程度上竟然超过了专业的研发工程师.AutoML的目标并不是要将人类从开发过程中剥离出去,也不是要开发全新的人工智能,而是让人工智能继续维持某种速度来改变世界.笔者认为,机器编程即将

Python的ORM框架SQLAlchemy入门教程_python

SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又重要于表和行. 一 安装 SQLAlchemy 复制代码 代码如下: pip install sqlalchemy 导入如果没有报错则安装成功 复制代码 代码如下: >>> import sqlalchemy>>> sqlalchemy.__version__'0.9.1'>>> 二 使用 sqlalchemy对数据库操作 1. 定义元信息,绑定到引擎 复制代码 代

Python的ORM框架SQLObject入门实例_python

SQLObject和SQLAlchemy都是Python语言下的ORM(对象关系映射)解决方案,其中SQLAlchemy被认为是Python下事实上的ORM标准.当然,两者都很优秀. 一.安装 复制代码 代码如下: sudo pip install SQLObject 使用SQLObject操作mysql时候报错ImportError: No module named MySQLdb,那便安装MySQLdb: 复制代码 代码如下: sudo pip install MySQL-python 没想

node.js Web应用框架Express入门指南_javascript技巧

一.安装 复制代码 代码如下: $ npm install express 或者在任何地方使用可执行的 express(1) 安装: 复制代码 代码如下: \# 译注:强烈建议这种方式$ npm install -g express 二.快速上手 最快上手 express 的方法是利用可执行的 express(1) 来生成一个应用,如下所示: 创建一个 app: 复制代码 代码如下: $ npm install -g express$ express /tmp/foo && cd /tmp

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

原文:ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库 前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET--"Jws.Mono".由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间来研究这个,小蝶惊鸿的博客又激起了我的兴趣,我花了四天的时间,终于在Liunx上跑起了属于我自己的应用程序,其中数据库使用到了PostgreSQL数据库.对于数据库的选用

Python的SQLAlchemy框架使用入门

  这篇文章主要介绍了Python的SQLAlchemy框架使用入门,SQLAlchemy框架是Python中用来操作数据库的ORM框架之一,需要的朋友可以参考下 数据库表是一个二维表,包含多行多列.把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录,比如,包含id和name的user表: ? 1 2 3 4 5 [ ('1', 'Michael'), ('2', 'Bob'), ('3', 'Adam') ] Pyth

微软同步框架(MSF)入门之四--冲突(Conflict)检测和处理

在几篇文章当中,我介绍了 SnapShot(快照方式)和"只同步新更改和增量更改"这两种同步方式并对相应的生成文件进行了粗略的分析.今天开始把话题深入一下,聊一聊MSF的冲突检测和处理. 这里所说的冲突(Conflict) 主要是指当客户端与服务端数据在进行CUD时,所操作的数据同步期间发生了错误,如通常所说的约束冲突(主键重复),以及在同步时多个节点(客户端)上更改了同一行,或服务端删除该行而其它节点却更新了该行便存在冲突等.当然在设计应用程序时应避免产生冲突(比如可通过筛选行和列等