tags: Asp.Net, ActionPack, Database, 数据库, CodeGeneration

  昨天才知道有ActionPack这个东西,据介绍说很多概念是从Ruby On Rails来的,但我对Ruby On Rails没有了解,所以也不知道是怎样,但我知道ActionPack真是是相当强的东西,即使它现在还不是足够的强大,但是经过发展,必然大有作为.

  闲话少说,到底ActionPack是个什么东西呢.说白了,它就是一个代码生成器,帮你生成访问数据库的代码. 但跟一般的代码生成器又有不同,ActionPack生成的代码并不存储在文件系统中,而是直接被编译在内存中,连Dll文件都没有.

  它是怎么做到这些的呢?

  最核心的就是BuildProvider了,它使用了Framework中的BuildProvider,在在生成的时候动态编译代码.这被编译的这些代码就是根据数据库中的表来生成的.而要让它做到这些,你只需要在配置文件中配置数据库连接字符串就可以了.

  以上是感性的认识,接下来看看它的结构.

  首先是一个BuildProvider,它继承自System.Web.Compilation.BuilderProvider,只要在Web.Config文件中配置,就可以让它在生成的时候直接运行里面的GenerateCode方法,跟HttpHandler有点类似.这是触发点.

  然后是CodeGeneration,看名字就明白了,它用来生成代码.

  然后是SchemaService,这个是用来读取数据库中的表信息的

  TableSchema,存放表信息,在进行代码生成的时候使用到.

  上面这几个,是ActionPack实现机制的主要部分.接下来的是一些配置和数据库访问的东西

  ActionPackConfig,ActionPackConfigurationSetting,这两个是读取配置文件的,比较简单.

  DBHelper和Query这两个是数据库操作的

  ActiveList,ActiveRecord,这两上是Entry的模板类.在这里封装DBHelper和Query中的操作,使用这两个模板类,使生成的代码变得十分简单.否则,生成代码的工作将变得十分繁琐.

ActionPack的结构就这样了,有空再继续深入剖析.

posted on 2006-08-26 11:14  Lupin  阅读(951)  评论(1编辑  收藏  举报