XCodeFactory

C#编程爱好者
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

XCodeFactory3.0完全攻略--基本思想

Posted on 2005-09-12 11:38  C#编程爱好者  阅读(1890)  评论(0编辑  收藏  举报
     XCodeFactory的主要目标是使开发人员从SQL语句、从数据层解脱出来,也就是说,使用XCodeFactory之后,开发人员可以不用关心数据层的任何东西,而所要做的仅仅是维护xcf文件--XCodeFactory的项目文件,一个xcf文件对应你的一个VS.NET项目中数据层。    
   
只要有xcf文件在手,我就可以使用XCodeFactory自动生成数据库中的表、所有的数据对象类和数据访问类。所以当需要修改某个数据库中的某个表的结构时,只需要XCodeFactory打开xcf文件,修改对应的内容,点击生成按钮,然后重新编译你的VS项目。

   
你也许已经了解一些了,是的,思想是这样的,一个VS.NET项目对应着一个xcf文件,即
    VS.NET项目的数据层 《==》Xcf文件《==》(多个)物理数据库

    所谓数据对象类,可以说是一个简单的数据结构,它的所有属性都与对应的数据库表中的字段一一对应,注意,是“一一对应”,而数据库类型也转换为对应的C#类型,如NVarChar转换为stringimage转换为byte数组等等。

    而一个对象(即一个数据对象类的实例)对应着数据库表中的一条记录。
 

    如今已经有很多的数据层自动生成工具了,这些工具的作者对数据层的设计都有自己的一套方案,XCodeFactory也不例外。比如有的把数据库的访问操作作为数据对象(对应数据库中的一个表)的公有方法实现,有的则将数据对象和访问者独立开来。XCodeFactory采用的是后面一种思想。

    依照上文的例子,Student类对应的SqlServer的数据访问类StudentSqlDealer用于在OR之间转换,如StudentSqlDealer.GetObjects方法将数据库中符合条件的记录转换为Student数组返回,而StudentSqlDealer.Insert(student1),用于向数据库中插入一条记录。之所以没有将数据访问操作作为数据对象的公有方法提供,是因为:
1)不够直观,含义模糊。
    比如Student.Save表示将自己插入数据库,Student.Update表示更新数据库中对应的记录。那么使用者怎么知道到底要调用哪个了?难道每次调用前都要先调用Student.IsExist判断一下对应的记录是否存在?

2)有些操作很难表达。
    比如批插入,使用Student.InsertBatch吗?很明显InsertBatch根本就不是Student的职能。而使用StudentSqlDealer.InsertBatch就很清楚的表达了意思。 

    基于上述两个原因,所以将数据对象类和访问者独立开来,这样做还可以带来的额外的好处:
1)切换数据库类型更加容易。使用反射类工厂可以通过修改配置文件达到切换数据库类型的目的。
2)当数据库访问接口改变时,数据对象类不用修改。
    这些将会在后面的示例中体现出来。    XCodeFactory3.0完全攻略 目录