NHibernate in Action(序,前言,致谢)

 
     2004中旬,我决定开始研究不同于存储过程或者Code Smith代码生成的另一个领域,持久化 。那时候,我还对周围的ORM,业务对象和领域驱动设计的呼声感到困惑不解。我有自己的数据集、存储过程,同时我也有代码生成工具来让我的开发更容易,所有工作都做得很好,但当我处理一些复杂系统和试图从团队中学习团队知识的过程中,我发现了问题。
     最后,我明白了最大的问题出在于我过去对数据处理得方式:当我建立一个应用程序时,数据被放在第一,而程序摆在了第二。这样的方式不适合我们建立复杂的应用程序。事实上,这种编程方式在面向对象设计中已经被摒弃。我没有任何理由让它来对数据进行处理。
     现在已经很难让我回想起是什么让我专注在NHibernate上--或许是由于对于再博客发表文章的激情,让我不断思考。但是无论什么原因,我还是做了那个决定。四年后的今天,我依然没有后悔当初的那个决定,同时,我也对我项目感到百分百自豪。这个决定已经通过很多种方式让我得到回报。
     有两个特别的场景浮现在脑海中。第一个就是:在一个与客户一起召开的非常紧张的会议上,客户的DBA强烈希望我们的系统能够支持SQL Server。那是客户的需求,但是我们的DBA认为那是对他工作内容的干涉,他一点我不喜欢这样。在他看来,在AS/400上的DB2是客户这个时期和下个时期都应该使用的。在会议过程中,我拿出笔记本,我发现ADO.NET也支持DB2,于是我对程序做了一下配置。我叫负责测试的DBA测试数据库,45分钟后程序就跑起来了。最后产品还是用了SQL Server,但是这是客户的选择,虽然不是实施必须做的。
     其中第二个场景是,我们要建立一个相当复杂的多客户共享的HR管理系统,这个系统基于从原有主机中导入的数据库,这足以让一个程序员崩溃。数据表数量非常多(当然,其中有200张表是员工表)这些表在不同客户也是不一样的,这个数据库层是有一个批量处理程序直接从平面文件中复制得来的。基于这样的数据库(不可以改变)开发应用程序至少可以说是个挑战。我们可以建立完全与数据库层无关的一些领域模型同时将他们与每个客户的数据库映射起来。虽然我不可以说这很容易,但是我们可以将复杂的东西封装到映射文件中并由系统集中维护(只有它们才理解什么值在哪里运行)。
     在这两个场景中,我试图从NHibernate中获取最大的价值。在第一个场景中,它表现出良好又强大的功能来消除与客户交流中的障碍。在第二个场景中,我们让问题在一个数量级上变得更加简单。我们团队只需专注于UI设计以及业务问题,而不是解决持久化问题。
     我从NHibernate0.4或者0.5的时候就开始使用它,一路看着它(也很荣幸参与其中)如何从一个简单Hibernate的一部分变成了一个有特性,公共的以及独立的个体。 NHibernate 1.0 实现了与Hibernate2.1相同的版本,支持大部分应用场景,但它仍然是Java版本的一个分支。直到1.2开始,我们可以看到越来越多的工作不仅使NHibernate越来越友好,而且添加了很多独一无二的新属性进去。
     NHibernate1.0当时是一个非常优秀的ORM框架,但是回过头看来,它跟1.2和2.0从功能上比起来还是相当的粗糙。
     NHibernate1.2增加了对泛型,存储过程,多重查询,写batching等等的支持。2.0则专注于与Hibernate3.2相同的功能,添加了事件和监听器,无状态sessions,连接与合并类,分离查询等等。NHibernate也即将提供对Linq的支持,这已经在几个项目中 运用上,可能将在NHibernate2.1中发布。
     NHibernate可以得益于Hibernate系统的成长以及它的一些卫星项目。我将会提到NHibernate搜索,它可以让你的实体跟Lucene.net搜索引擎整合起来;同时还有NHibernate验证工具,为你提供强大的验证框架。NHibernate Contrib包含了许多例子。但是NHibernate的扩展以及超越了Java的项目。Rhino 安全项目提供了一个完全基于NHibernate的业务安全包。好几个项目通过NHibernate提供了映射的便利,还有一个大型的用户团队分享日常工作中遇到的问题和知识。
     这个丰富的开发环境不是意外而产生的,它是因为NHibernate是一个灵活与适应能力强的框架,当你了解了它的工作方式以及如何使用它,它将给你的项目带来巨大的好处。但是,灵活和适应能力强需要代价,很多人发现NHibernate学习过程很曲折,我不太同意;但是作为这个项目的参与者,我对NHibernate的这个特殊问题不好做出评价。
     当我开始接触NHibernate时候,我拿到了《Hibernate in Action》(Christian Beuer 和Gavin King,2004)并仔细阅读每一页,我的目的不是记住API,而是去理解NHibernate---不仅是API和如果使用在方案中使用它们,而且包括设计方法以及NHibernate如何处理问题。另我高兴的是,《Hibernate in Action》包含了这方面的信息,同事也给我理解和使用NHibernate带来巨大的价值。
     但是《Hibernate in Action》是Java版本,所以我很乐意去听(和读)这本书。《NHibernate in Action》不仅仅是《Hibernate in Action》改了名字。这本书完成了翻译知识,并调整和延伸这些知识的任务。我认为这本书是任何想基于NHibernate的开发者必不可少的开发书籍。它包含了NHibernate的一些Hibernate版本没有的特别的特征且肯定对你有所帮助。
 
 
 OREN EINI, A.K.A. AYENDE RAHIEN
 NHIBERNATE COMMITTER
 
 
前言
 
     自从我对软件开发产生兴趣以来,最具挑战性和好玩的事就是解决问题,从业务层面到技术层面,我经常花费大量时间去考虑解决当前问题的最佳方案。
     发现了.NET Framework以后,我研究如何无去写业务程序。我对于如何加载和存储信息到数据库的问题感到相当的当有。我测试了当时流行的DataSet方法和底层的ADO.NET提供的API。虽然这些API非常容易搭建起来,但是它们表现得不太灵活和不太高效,让人感觉哪里出现了问题。如果你写过无数的管道代码和SQL查询语句就会明白我的意思。因此,我做了一些调查并发现了一些ORM工具。确切的说,我正在寻找一个非侵入性(non-intrusive),支持关系数据库的ORM持久化实现方案。经过测试过很好几个方案后我选择了NHibernate,因为它较好的满足了要求。
     我记得当时下着NHibernate0.4的时候,我对它稳定的性能和提供我需要的基本功能感到惊喜。不单是这样,它还带来了一个非常棒的开源开发者的社区。能够与别人分享我的想法以及遇到一群乐于帮助对方的程序员是我学习过程中一段美好经历。最后,我在我的第一个商业应用中采用了NHibernage 0.7。之后我其它项目中也用过无数次,我想我会在即将到来的一年继续使用它。
     当Manning出版社找到我喝Tobin来写关于NHibernate这本书的时候,我们已经有写一份教程来帮助其他人学习NHibernate的兴趣。虽然如此,撰写一本书也是一个惊人的调整。我们学习着去用一种简单又容易读懂的方式来满足读者。这是一次很好的经验所以我想推荐所有人去尝试一下。
     虽然JAVA开发者已经使用和编写关于ORM的内容很多年了,但是这项技术对于.NET开发者还是比较陌生的。这本书不仅解释如何去使用和扩展NHibernate,而且解释了它的核心逻辑。我们希望这本书能够就这个不简单的又必不可少的技术有所帮助和启发。
 
 PIERRE HENRI KUATE
 
 
 致谢
 
     首先,我们要感谢所有的核心开发人员,贡献者以及其他使NHibernate成为一级的开源工具的团队成员。同时,我们要感谢那些让Hibernate如此成功的人。感谢Jim Bolla,Mike Doerfler,Paul Hatcher,Sergey Koshcheyev,Demetris Manikas,Fabio Maulo,Donald Mull,Bil Pierce,Dario Quintana,Ayende Rahien,Peter Smulovics,Michael Third,Kailuo Wang,Kevin Williams以及其他NHibernate的贡献者。
     像其它书籍一样,这本书的出版也需要大量的时间,努力和耐心。我们感谢Manning出版社同事高超的专业水平及技巧。他们不断的致力于选择书本的内容并将作者最好的东西搬到该书中。尤其是要感谢出版商Marjan Bace,特邀编辑Mike Stephens,同时还有感谢Tiffany Taylor,Katie Tennant和Megan Yockey他们有价值的评价,指导和反馈。特别感谢我们的开发编辑:Frank Blackwebll,Jackie Carter和Cynthia Kanne,他们耐心的指导我们开始这本书编写。
     我们的校对同事们在我们要出版的时候在内容上给了我们很专业的建议。非常感谢Ayende Rahien对手稿的审阅和为我们编写了精彩的序。也感谢Mark Monster对于最后手稿的疑问,增加及建议。
     接下来的技术校对们在他们繁忙的工作中抽空从不同的方向阅读了手稿并提供了很多有价值的反馈,让这本书更加完善,他们是:Sergey Koshcheyev,John Tobler,Dan Hounshell,Alessandro Gallo,Robi Sen,Paul Wilson, Pete Helgren,Oren Eini,Doug Warren,Jim Geurts, Riccardo Audano,和Armand du Plessis。
     在本书出版之前,有很多朋友通过MEAP购买了该书的PDF版本。我们非常感谢他们的透过该项目提出的评论、支持和建议,特别是:Adam Cooper, Darren Maidlow, Morten Mertner, Magnus Salgo, Benjamin VanEvery, Jan Van Ryswyck, Fabio Maulo, Paul Anderson, Damon Wilder Carr, Shane Courtrille, Jim Beveridge, Daren Fox, David Gadd, Jason Whitehorn, Gary Murchison, Muhammad Shehabeddeen, 和Thomas Koch.
     PIERRE HENRI KUATÉ要感谢他的家人一直以来对他的支持和他在Polelo研究所的朋友一路以来的鼓励。
     TOBIN HARRIS 要感谢他的女朋友Georgina Reall,感谢她在整个项目中的支持,鼓励和耐心。他同时要感谢他的姐姐Marnie,感谢她的帮助和无止境的热情。
 
 关于本书
 
     NHibernate项目在2003由Paul Hatcher启动同时在Mike Doerfler和Sergei Koshcheyev的大量工作下,使得NHibernate成为一个成熟、稳定的产品,深受广大.net开发者喜爱。
     NHibernate原先是Hibernate项目中的一个分支,那时候ORM框架已经在Java界流行了很多年。
     Hibernate之所以流行起来的一个重要原因是大部分Java开发者已经习惯了大量的Hibernate书籍。事实上,我数过最少有15本书单纯介绍这个工具。而且与Hibernate相关的书籍还在不断的出现。
     但是直到现在,.net开发者并没有那么多关于NHibernate的学习资料。而这本书就是为了解决这个问题---我们最终为.net开发者写下了这本单纯是NHibernate的书。《NHibernate in Action》是基于非常畅销的《Hibernate in Action》这本Java版的开发指南。这本书远远不只是一个翻译,事实上,书里面包含了API的变动、代码改变、新功能以及他们的共同之处。
     我希望这本书的出版会是一个好的时机。.NET界会为ORM框架感到惊喜,我们希望这本书能够帮助你去发现、学习并享受这个成熟又强大的ORM框架。
 
谁能读本书
 
     这本书适合于那些使用.net的开发工程师或架构师,无论他们对NHibernate和ORM是新手还是有这方面的经验,都可以使他们获取巨大的价值。
     对于那些刚接触NHibernate的人们,阅读本书不需要其它预备知识。我们甚至希望你以前没有任何使用ORM框架的经验。这本书的知识可以带给你关于NHibernate的思想,帮助你开始建立一个NHibernate解决方案。
     我们也希望读过此书的朋友们已经在使用该项目,无论是用NHibernate自身还是诸如Castle Active Record或者Spring.NET这样的类库。这本书将帮助你了解更多关于NHibernate更核心的东西。它也将帮助你更好的使用NHibernate来实现功能和更完整的使用它的功能。
     我们将尽最大的努力告诉大家NHibernate背后一些常用或者不太常用的功能。我们的在博客和论坛上已经提到了大部分的内容,例如持久化生命周期和一些其他关于外部映射的功能。
     总之,无论你是NHibernate的新手还是老手,我们都希望这本书能够教会你新的功能,使你体验该工具的带来乐趣和成功的喜悦。
posted @ 2010-02-08 17:42  Chris Cheung  阅读(418)  评论(0编辑  收藏  举报