小虫个人认为,microsoft在asp.net里面所有增加的功能中,ObjectDataSource的确是一个最让我眼睛一亮的东西,再不象以前的的DataSource控件给人的鸡肋之感,而给我们在三层架构的数据库开发过程中带来了耳目一新的感觉。
要用好ObjectDataSource,首先我们要认同Microsoft在三层结构的开发模式中的可视化理念。小虫认为ObjectDataSource是Microsoft提供给大家广泛采用的三层数据架构与MS一直提倡的可视化编程的一座桥梁,而就目前小虫的个人使用情况来看,这座桥梁基本满足了MS现在推出的各种数据库控件的数据提供服务(比如GradView, DataList, DetailsView, FormView 等),ObjectDataSource直接在页面上提供了商务逻辑层与用户界面层之间的数据交换。
下面小虫就前段时间做的一个小东西,具体的说明一下:
首先,我们谈三层结构,在商务逻辑层与用户界面层之间,在之前的Asp.net 1.1中,用户界面层必须采用第三方控件或者直接读写商务逻辑层的数据,而无法进行控件的数据绑定,用户必须手工填写好给商务逻辑层中的接口所需要的各种数据,并按照所使用的页面控件的格式编写程序逐一把从商务逻辑层中得到数据呈现出来。这样的开发模式在我们以往在asp.net的开发中,认为是理所当然的,既然要使用三层架构,就必须在开发效率上做出牺牲,然而,现在MS伴随着ObjectDataSource的推出,大声的对这种概念说:NO!
那么,我们看看现在的三层架构中引入了ObjectDataSource后新的开发流程是什么呢?首先,在数据库服务层中,我们不需要做任何变化,继续沿用大家认为记过长时间优化而得来的数据库接口,如果您喜欢用DataSet,那么,继续;如果喜欢使用SqlDataAdapter的,也请继续。不需要任何的改变,同样,在商务逻辑层中,大家尽管按照以为的习惯去书写,也同样不需要改变什么,比如读数据的时候,无论你返回的是DataSet,还是你自己定义的一个Array,List,都可以,而带来天翻地覆的变化的,是在用户界面层,小虫经常是做到了在用户界面层的无代码编程(C#或者Basic.Net代码),那么,这是如何做到的呢?
这里,小虫用一个简单的例子来加以说明:
我们假设有一个书店的后台管理程序中,必须实现一个书的类别的增加、删除、更改、和查询。对于数据库层来说,无非是写好这四个存储过程:Insert, Update , Delete , Select,和调用他们的方式,而在商务逻辑层中,您首先需要定义一个类,比如Class BookClass, 然后分别需要根据四个存储过程分别写出以下四个函数:
Class BookClass
{
Public static int Insert(…); // 增加一个书的类别,成功返回这本书的ID
Public static bool Update(…); //修改一个书的类别,成功返回true,失败返回flash
Public static bool Delete(); //删除一个书的类别,成功返回true,失败返回flash
Public static DataSet Select(); //查询指定条件下书的类别信息,成功返回一个DataSet,失败发挥Null.
}
这里有个注意的地方,那就是你函数中的参数名必须和数据库中表的字段名或者存储过程的参数名保持一致,而如果是主键,那么参数名必须为:original_<字段名>。
写完了上面的商务逻辑层中关于书的类别的代码,那么,下面就是如何调用的问题了,在传统的Asp.net 1.1的开发过程中,如果你想增加一个书的类别,那么必须手工填写好Insert(…)函数里面的参数,然后根据返回值来进行处理,那么现在呢?
小虫偷懒的办法来了,呵呵:
小虫在页面上拖一个FormView,在Wizard中的Chose data srouce中选择new data srouce, 然后选择database,,设置ID为ObjData(记着,是DataaSource 不是Object,先别问为什么),然后,按照提示一步步的把你正常做sqldatasource的习惯定义好需要的字段,最后IDE会自动的把你所需要的格式生成FormView的template design。然后,呵呵,delete掉刚才自动加的哪个SqlDataSource控件(也别问我为什么),再然后,拖一个ObjectDataSource过来,把ObjectDataSource的ID改成你刚才删除掉的SqlDataSource控件的ID:ObjData,再把选择ObjData的设置向导,选择Configure Data Srouce,把它设置为BookClass,然后分别给Select, Insert, delete , update设置你在Class BookClass中定义的函数,然后,别的也不需要,直接finish,就可以了。如果是Select查询,而又与参数,那么根据相应的条目设置就可以了。再然后,按“F5”运行啊,哈哈,至于页面布局、美化,那关我什么事,那是美工的活,我可不能越俎代庖啊。
恭喜,你的这一段程序完成了,哈哈,无代码编程。因为时间的关系,小虫再整理出一段小代码放上来给大家参考。
随便说一下,你当然可以直接用ObjectDataSource来进行设置,每个相应的字段分别bind你所需要的控件,只是要注意,如果是某个数据表中的主键,那么最好加在FormView或者GradView等的DatKey中,同样,在函数中的变量就必须是original_<字段名>。
一个在Mircosoft大树上蛀了几个小洞的虫子
联系Mail: 代码虫
小虫目前做的主页: http://www.gofordesign.com