只要有xcf文件在手,我就可以使用XCodeFactory自动生成数据库中的表、所有的数据对象类和数据访问类。所以当需要修改某个数据库中的某个表的结构时,只需要XCodeFactory打开xcf文件,修改对应的内容,点击生成按钮,然后重新编译你的VS项目。
你也许已经了解一些了,是的,思想是这样的,一个VS.NET项目对应着一个xcf文件,即
VS.NET项目的数据层 《==》Xcf文件《==》(多个)物理数据库
所谓数据对象类,可以说是一个简单的数据结构,它的所有属性都与对应的数据库表中的字段一一对应,注意,是“一一对应”,而数据库类型也转换为对应的C#类型,如NVarChar转换为string、image转换为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完全攻略 目录