关于ASP.Net的导入导出(3)
Com.urp.command.FileFrameWork(3)
时间过的好快,距离上一篇文章又过了一个星期了,工作依旧忙忙碌碌,项目依旧浑浑噩噩,看不清未来。不说这些了,还是说说自己写的东东吧。上周一直没交出新的文章上来,其实不是自己不想写,随着设计的进行,考虑的东西越来越多了,结果自己没做过的东西也越来越多。很多需要先写一下,看看实现某个功能该大致如何设计,然后再重构,呵呵,有一点极限编程的味道了;其实从另一个侧面说明了经验的不足。
这一周,整个结构改变比较大。为了同时支持DataSet,Collection, 平白无故多出来一层。因为.Net中的DataSet,微软并没有让它来继承IList接口,换句话说没有办法来将它和Collection规范到一起,所以只能多写一个IdataAdapter接口,用对象适配器把DataSet,Collection包装一下,貌似问题得以解决。(DataSet和DataTable都有继承一个IlistSource的接口,向对象提供返回可以绑定到数据源列表的功能,好象多少和Ilist有点关系,实际用途没有,网上的文章涉及的也不多)
IdataAdapter相关的类图如下:
DataAdapterFactory是一个简单工厂,通过一个调用一个静态方法来,返回需要实例化的IdataAdapter名字来实例化IdataAdapter。CollectionAdapter包含一个ModelCollection,ModelCollection继承CollectionBase.每一行记录一个Model。DataTableAdapter包含一个DataTable。ArrayAdapter包含一个object[]数组,针对三种不同的持久层。应该说用DataTable实现的要相对容易一些,很多的操作就相当于一个简单的数据库查询,直接Fill进DataTable就可以了。CollectionAdapter相对要复杂一些,需要实现自己的数据结构,要模仿DataTable建立Row,Column,并要求用户程序有自己的Model层,对每个私有字段提供get,set属性,通过属性完成Fill。不过在效率上DataTableAdapter可能是最好的,因为是一次性读入的,只要访问一次文件,而很多时候CollectionAdapter需要一行一行的读取文件的数据。
这样子改变以后IdataAdapter主要是负责数据的持久化,负责数据保存,从文件中把数据读入内存,最后导入数据库的时候,我们只需要获得IdataAdapter就可以了,而这个读的过程就用IFileAPI完成。
ImportFileFrame,ExportFileFrame的类图如下:
增加了一个AbstractFileFrame的抽象类。文件的打开,关闭,等都提到这个类里,方便以后的重用。我们期望在ImportFileFrame,ExportFileFrame中的Import,和Export都用模板方法实现,例如:
{
try{
ProcessFile(); //保存临时文件到服务器
OpenFile(); //打开文件
ImportCheck(); //导入校验
Import(); //导入
DeleteFile(); //删除临时文件
}
catch(Exception ex){
}
finally{
CloseFile(); //关闭文件
}
}
到目前位置,四个主要Frame类基本上都形成了,从ImportFileFrame,ExportFileFrame的改变来看,未对前两个Frame造成过多影响,说明我们的功能设计还是比较成功的。这里需要说明的是对于IFileAPI的创建,和之前的有些不同,因为考虑到实现CollectionAdapter,DataTableAdapter后,文件的读取,数据的读入内存在方式上存在不同,所以,有可能到最好需要在建立另一组从IFileAPI继承的类,而且他们的实例化工厂要有IdataAdapter 决定,就暂时先这样考虑着吧。
由此,导入的序列图如下:
posted on 2006-07-10 19:41 whoisyorudady 阅读(2257) 评论(0) 编辑 收藏 举报