NHibernate之1——为什么不用DataSet?

翻译自NHibernate by Justin Gehtland
http://www.theserverside.net/
    
        如果你只是通过ADO.NET、DataSet来和数据库之间进行交互,你只是取得了数据库中一部分的静态快照,它和RDBMS的功能模仿的是一模一样:二维数据表、通过主外健定义的数据关系。

         DataSet的最大问题是它并不符合面向对象的设计原则。DataSet用二维表,我们倾向于使用对象;DataSet使用主外健建立关系,我们倾向于使用对象间的引用建立关系;DataSet提供一大堆的SQL语句来与数据库交互,而我们则倾向于使用方法。当然,通过强类型的DataSet也可以解决部分问题,但还解决不了所有问题。

         我们提出的一项原则是“透明”,企业级应用程序的关键就是领域模型,它们是一些能够模拟、解决客户问题的一些类。如果你的客户是银行,那么你的领域模型里面就应该包括帐户、存款、贷款等东西,如果你的客户是一家旅行社,那么就应该包括旅游、旅馆和航班等东西,客户的问题都应该在这些类里面去解决。像数据存储、消息传递、事务处理等等,这些服务对于你的领域模型来说都应该是透明的。透明意味着你的模型能够从这些服务中受益而不是被这些服务修改。也就是说你的应用程序的结构应该完全围绕着你的业务问题而不是业务以外的技术问题。

        直接对DataSet编码破坏了“透明”,很明显能在使用DataSet的代码中看出你所使用的存储机制,这将影响到你编写代码的方式。另外一种数据存储方式就是O/R Mapping工具,微软也正在搭建这么一套框架,叫做ObjectSpaces,但最近微软宣称这项技术将延迟到2006年发布。NHibernate——一项开源的解决方案,这是为了解决这样的问题而出现的。通过NHibernate,它能够将二维数据表映射为领域对象。

未完待续。。。。。。
    
   
posted @ 2005-10-31 23:14  leonbao  阅读(3184)  评论(39编辑  收藏  举报