浅谈model, orm, dao和active record的区别

在做web开发中,经常会碰到这样几个概念:

Model DAO,data access object,数据访问对象 ORM,object-relational mapping,对象关系映射 Active Record

这些概念都是和数据相关的,然而他们之间有怎样的区别呢?

首先来看Model,模型。模型是MVC中的概念,指的是数据和改变数据的操作(业务逻辑)。模型通常指代现实生活中的某样实体。以订单为例,每个订单都包含许多数据,如客户、价格、明细等等,这些数据都叫做订单这个模型的属性,此外,和订单相关的一些列操作,比如当购买时,你可能需要先检查库存,给与一定的优惠,再更新账户余额和积分等等,这些就叫做业务逻辑,也是模型的一部分,从代码上来讲,是要放在模型中的。

当模型执行完业务逻辑后,我们便要把模型中的数据保存到数据库中。如果我们直接把和数据库相关的代码放在模型里,会使得以后的维护相当的麻烦。在我之前的一个项目中,我们用户的增长相当快,导致一台数据库无法支撑所有的访问,不得不使用分库来解决问题。然而前人把SQL语句直接写在了模型这一层里,这导致分库相当的麻烦,我们只能先把这些SQL语句抽出来,才能把分库进行下去。我们把这些抽出来的SQL代码放到单独的一层,这一层便是DAL,Data Access Layer,数据访问层,它由许多DAO组成,目的便是把和数据库相关的代码封装起来,这样当我们执行分库时,便只用调整DAO的代码了,模型根本不用关心它使用的数据是放在A库还是B库。

DAO其实是来源于J2EE的一个设计模式,当初的目的也是使得企业更换数据库时,不用影响模型层的代码。

与DAO类似,ORM也是一种封装数据访问的概念。然而ORM不像DAO只是一种软件设计的指导原则,强调的是系统应该层次分明。ORM更像是一种工具,有着成熟的产品,比如JAVA界非常有名的Hibernate,以及很多PHP框架里自带的ORM库。他们的好处在于能将你程序中的数据对象自动地转化为关系型数据库中对应的表和列,数据对象间的引用也可以通过这个工具转化为表之间的join,而Hibernate甚至提供一套他们自己的数据查询语言HQL来解决复杂的查询问题。

使用ORM的好处就是使得你的开发几乎不用接触到SQL语句。创建一张表,声明一个对应的类,然后你就只用和这个类的实例进行交互了,至于这个对象里的数据该怎么存储又该怎么获取,通通不用关心。

Active Record则是随着ruby on rails的流行而火起来的一种ORM模式,它是把负责持久化的代码也集成到数据对象中,即这个数据对象知道怎样把自己存到数据库里。这与以往的ORM有不同,传统的ORM会把数据对象和负责持久化的代码分开,数据对象只是一个单纯包含数据的结构体,在模型层和ORM层中传递。而在Active Record中,模型层集成了ORM的功能,他们既代表实体,包含业务逻辑,又是数据对象,并负责把自己存储到数据库中,当然,存储的这一部分代码是早已在模型的父类中实现好了的,属于框架的一部分,模型只需简单的调用父类的方法来完成持久化而已。

如何学好C语言

有人在酷壳的留言版上询问下面的问题

keep_walker : 今天晚上我看到这篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

鼓励并为你叫好。我鼓励你想要去学C语言的想法和精神,很多人都觉得C语言好学,其实并不然。(你可以看看《C语言的迷题》)现在的这个社会更多地去关注那些时髦的技术,而忽略了这个流行了40+年的C语言。一门技术如果能够流行40多年,这才是你需要去关注和学习的技术,而不是那些刚出来的技术(过度炒作的技术,Windows编程史)。这才是踏踏实实的精神。 不要找借口。这一条路走下来并不容易,不要给自己找借口。我最不喜欢听到的就是“很忙,没有时间”这样的借口。我以前在银行做项目,早9点到晚10点,周一到周六,我一样可以每天抽1个小时来看书和专研,一年下来也能精读5、6本书。我现在的工作项目和招聘任务很紧张,刚生的小孩只有自己和老婆两人带,还需要准备讲课,但是我还是能够找到时间看文章写文章维护酷壳。所以,我可以告诉你,“时间就像乳沟,只要你肯挤,就一定会有”。 学好C语言和系统编程。我认为,学好编程有四个方面:语言、算法和数据结构、系统调用和设计。 语言。我可以告诉你C语言有两大主题你要好好学,一个是内存管理,一个是指针!这个世界上90%以上的C/C++出的严重性错误全是和这两个有关。不要看谭浩强的那本书,那本是本烂书。推荐这本书给你《C程序设计语言(第2版·新版)》 算法和数据结构。我认为,用C语言实现算法和数据结构莫过于最爽的事情。推荐你看这本书——算法:C语言实现(第1~4部分)基础知识、数据结构、排序及搜索(原书第3版),还有那本经典的《算法导论》 系统编程。Windows下推荐两本书——《Windows 程序设计 》和《Windows核心编程》,Unix/Linux下推荐两本书——《Unix高级环境编程》和《Unix网络编程卷1,套接字》《Unix网络编程卷2,进程间通信》尤其是《Unix网络编程》这本书,一通百通,无论Windows还是Unix/Linux,都是一样的。 系统设计。关于设计方面,我全力推荐《Unix编程艺术》,看完以后,你就明白什么是真正的编程文化了。然后,当你看到Windows的Fans的某些言论时,你就知道什么叫一笑了之了。

如果你能在2-3年内精读完这些书,并全部融会贯通,那么你就明白什么是一览众山小的感觉了!我足足花了5年时间才算是真正全部读完这些书的。最后,祝你好运!努力!

——-更新:2011/03/29 20:00——-

我想,这篇文章主要想告诉大家这么几件事:

编程编到一定时候,你就需要了解底层系统的机制,否则,知其然不知所以然。 我没有否定非C的程序员的逻辑,真正的逻辑是——如果你想要了解底层机制,请学习C语言和操作系统。 40多年的Unix/C影响深远。包括影响了Windows。如果你想一通百通,一定要了解Unix。那是计算机文化真正的根。 不要肤浅地去思考问题。比如,不要以为一个DBA就不会考虑数据库引擎的内存页面的问题。也不要以为Web程序员就不需要了解后台的服务器和脚本的运行性能以及TCP/IP的问题。

高手往往都是有很强的系统的基础知识的,表面的东西永远是肤浅的。

相关文章 2009年12月24日 — 程序员眼中的编程语言 2011年03月28日 — 纯文本配置还是注册表 2010年04月01日 — C++ 程序员自信心曲线图 2010年03月30日 — “21天教你学会C++” 2009年09月03日 — 编程真难啊 2009年08月16日 — 操作系统航空公司 2011年04月20日 — 再谈“我是怎么招聘程序员的”(上) […]

T恤插画设计精选

详情查看原文:68 Best Tshirt Illustration Design Inspiration

http://dzineblog.com/2011/01/68-best-tshirt-illustration-design-inspiration.html

Related posts:

精彩得要命的T恤设计 10内最有趣的T恤图案设计 […]

做个好博客

收到一位白板报读者来信,信中问我能不能提供和菜头博客上那种Email订阅,博客一更新,立即发送到订阅邮箱里,这样就不必每天跑来看有没有更新了。

因为我很少能有收到读者来信的荣幸,所以非常上心。跑到菜头的博客,发现他是用Feedburner实现的。这个服务我也曾用过,但自从它被封锁之后,再也没有跟进过。立即重新烧制了一个白板报的RSS,开通了Email订阅功能,并且添加到每一页的右边栏和页尾。以后读者只要填入Email,经过确认,就可以收到白板报的更新了。

在推特和微博的逆袭下,博客日渐凋零,写博客的人越来越少,人们阅读长文本越来越没有耐性。但140字的语录体与博客文章比,不但输在信息量上,还输在逻辑思维上。微博的只言片语留下巨大的逻辑鸿沟,损伤了文章应有的一致性。

微博会满足人的信息饥渴,但无法填补思维的虚空。所以,为自己计,为读者计,还是应该多写博客。

附:博客实现Email订阅的方法

1、访问www.feedburner.com

2、登陆你的Google Account,也就是你的Gmail帐号。如果没有,就申请一个。

3、按照提示,为你的博客烧制一个Feed,提示是一串英文“Burn a feed right this instant. Type your blog or feed address here”

4、管理你为博客创建的Feed,在顶部菜单里找到Publicize,点击后,在左侧菜单里找到Email Subscriptions,激活之。

5、你会得到两段代码,一段是Form格式的,一段是链接格式的。根据你的需要,把给出的代码,贴到你的博客页面模版上。

6、如果你用的是Wordpress,就把链接贴到Widget里,并且FTP打开你的博客,找到http://www.yourdomain.com/wp-content/你的主题/single.php,把给定的链接插到页面底部。

7、如有什么不明白的,可以来信问我。

网站吉祥物设计

许多网站流行完全去掉图案LOGO,只使用文字。还有一部分选择使用一个个性鲜明的吉祥物。如动物或者特别的角色形象。看起来亲和活泼有生气。

详情查看原文:20 cool logo designs that use a mascot

http://www.designer-daily.com/20-cool-logo-designs-that-use-a-mascot-13005

Related posts:

50个一直保持高质量更新的设计BLOG CSS3的10个有趣实验与演示 13个性感的注册页面 35款经典的电子商务网站设计 设计账单的案例与技巧 […]

Category

Archives