资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,接,口与抽象的应用实例,1,常用的批量导入的开发,打开文件,读取所有数据,导入所有数据,打开文件,读取一条记录,导入一条数据,关闭文件,关闭文件,导完,未导完,2,为批量引入接口与抽象,通过常用的批量导入方式,可以很好的完成数据的导入,为什么还要引入,接口与抽象呢?以下情况是经常发生的:,1、数据源的类型和格式改变时,2、目标源的类型和格式改变时,当然很多人会用,COPY+PASTE,,然后在恰当的地方进行恰当的修改,来实,现恰当的功能。但这样做的工作量是相当大的。比如数据源不是,XLS,,而是来自,另一个数据库,或是,SOCKET,流。而且可复用性基本为零,维护量在后期也会相,当的大。接口与抽象这时就体现了它的优势。,3,批量导入设计的一般框架,接口与抽象是一个公用模块不可缺少的设计。对常用的批量导入业务进行,抽象,可以发现,类似于,Pipe,处理,即数据读取,数据导入。再进一步的抽象,业务,读取一条记录,导入一条记录,可以使子类的开发更加容易,代码更空,易复用和维护。,4,批量导入,数据读取,IReadData,AReadData,TextReadData,XlsReadData,BaseReadData,5,批量导入,数据导入,IWriteData,AWriteData,TextWriteData,XlsWriteData,BaseWriteData,6,批量导入,接口适配器,这里借用适配器这一说法(适配器是用空方法实现接口的类)来处理不同,接口间数据格式的匹配。比如读取,TEXT,文件的,map (new Integer(n)=value),和,导入,XLS,文件,map (String=value),之间的转换。当各种数据源读取到的,Map,和写,入所要求的数据结构一致时,就可以毫无顾忌的相互导入了。,7,接口适配器的设计,在批量导入的实例中,适配器只需要对不同格式数据源进行匹配,使之出,来的结果数据结构相同。适配器只需要用抽象类就行了,可以不使用接口。这,样,几乎所有类型的数据导入就可以实现了。下面将直接用简洁的代码实现。,文本文件,XLS,文件,数据库,SOCKET,8,数据源读取设计,Public interface IReadData,public Map readData();,Map,为接口的返回对象,,map=null,读取结束。,用,Map,作为数据结构可以解决数据列的顺序问题。比如,XLS,文件,title=Value,,TEXT,文件,new Integer(n)=value。,这样可以通过中间类实现,XLS,到,TEXT,格式,的转换,从而实现批量导入。,9,数据源读取设计,TEXT,文件,Public class TextReadData implements IReadData throws Exception,private InputStream inputStream;,public TextReadData() throws Exception,inputStream=new (file);,public Map readData(),InputStreamReader rRead=new InputStreamReader(inputStream);,BufferedReader bRead=new BufferedReader(rRead);,String msg=bRead.readLine();,if(msg=null)return null;,Map map=new HashMap();,String msgArray=msg.split(,“,”,);,for(int I=0;I0)sb.append(,“,”,);,sb.append(msg);,sb.append(,“,rn,”,);,outputStream.write(sb.toString().getBytes();,12,适配器设计,默认类,Public class DefaultAdapter implements IDataAdatper,public Map changeDataFormat(Map map),return map;,这个类没有只是直接返回,可以用于文件复制或是读取后,结构相同的数据源之间导入。,13,批量导入最后设计,Public class DataImport,public void importData(IReadData iReadData,IWriteData iWriteData,IDataAdapter) throws new Exception,Map map=null;,while(map=iReadData.readData()!=null),map=IDataAdapter(map);,iWriteData.writeData(map);,14,结束语,以上所有代码的开发源于项目中,WLAN,数据的批量导入与数据导出的简化,实际的批量导入中,需要进行,各种业分析,如果将各种业务引入接口与抽象,这样数据的导入将更加易维护。另外,批量导入中也要对,异常进行处理,所以还需要对异常的处理引入接口与抽象。希望能抛砖引玉。,谢谢大家,15,
展开阅读全文