• / 10
  • 下载费用:5 下载币  

自标准数据案例(大庆油田 张敬新)

关 键 词:
标准 数据 案例 大庆油田 张敬新
资源描述:
自标准数据案例大庆油田 张敬新引子在 Silverlight 企业级项目开发中,访问数据库通常需要用到 WCF 作为数据支撑来提供数据服务,而数据基本上是以文本方式组织的。所以,在 Silverlight 端和 WCF 端就要订立紧耦合的契约机制。一般而言,WCF 端只提供符合双方约定格式定义的数据体,而 Silverlight 开发端在使用数据的时候,再根据双方的契约关系,将数据体转化成为相应关系型的数据,Silverlight 端和 WCF 端在数据使用上基本上是一一对应的关系。实现方式 1 ———— 数据体为中心为便于问题的阐述,下面以一个非常简单的实例为例。假设源数据有一个通讯录表,其表名为 AddressBook,表结构为字段名 类型Name StringQQ String数据只有 2 行,Name QQ张艳国 183585478张敬新 267282830首先,先组织成为源数据,代码如下:#region 源数据//数据结构DataTable dtAddressBook = new DataTable("AddressBook");dtAddressBook.Columns.Add(new DataColumn("Name",Type.GetType("System.String")));dtAddressBook.Columns.Add(new DataColumn("QQ", Type.GetType("System.String")));//数据体dtAddressBook.Rows.Add("张艳国", "183585478");dtAddressBook.Rows.Add("张敬新", "267282830");#endregion 源数据这样,数据就成为了 DataTable 表类型的数据了,一般在 oracle 等数据库中使用的数据,都可以以这种方式转化为.NET 下的 DataTable 表类型数据,但有些系统不能够使用 DataTable 表类型数据,例如Silverlight 端开发过程,这就需要将其生成中间数据体,例如 XML 格式体数据。下面的代码就是将其加工成为 XML 格式体数据:#region 数据体组织成为Xml格式数据//表数据string strXmlData = "";using (MemoryStream ms = new MemoryStream()){dtAddressBook.WriteXml(ms);ms.Seek(0, SeekOrigin.Begin);这样组织加工成的数据如下:企业应用系统在使用数据提供方提供的数据时,需要再次将其转化为.NET 下的 DataTable 表类型数据,先要依据双方的数据结构协定建立表结构,然后再将 XML 格式体数据追加到 DataTable 表中,进而再将该表交给应用系统使用。下面的代码就是将 XML 格式体数据追加到 DataTable 表:using (StreamReader sr = new StreamReader(ms)){string dtXml = sr.ReadToEnd();strXmlData = dtXml;}}#endregion 数据体组织成为Xml格式数据#region 应用端将组织成为Xml格式的数据转化为应用数据DataTable dtAddressBook2 = new DataTable("AddressBook");dtAddressBook2.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));dtAddressBook2.Columns.Add(new DataColumn("QQ", Type.GetType("System.String")));实现方式 2 ———— 自标准数据体为中心在实现方式 1,我们会发现,数据提供者和数据消费者的耦合度非常高,一旦数据结构发生了变化,数据提供者和数据消费者就要及时进行沟通协商,重新订立契约关系,那么,不仅数据提供者需要修改系统,而且数据消费者一方也必须修改其系统,系统非常脆弱不够灵活。为了改进实现方式 1 存在的这种问题,数据提供者可以在供应 XML 格式体数据的同时,提供数据格式信息,将数据格式信息与 XML 格式体数据打包成为一个整体,提供给数据消费者。而数据消费者一方,只需依据提供的数据格式信息创建企业应用系统使用的格式数据结构,再将 XML 格式数据体追加到企业应用系统使用的格式数据中。这样,数据提供者和数据消费者就大大降低了二者之间的耦合度,从紧耦合变为了松耦合,数据提供者和数据消费者可以相互独立地开展工作,而不必经常沟通协调契约关系,大大地提高了系统的健壮性和灵活性。数据使用者数据提供者源数据O r a c l e 等数据库封装有结构信息的X M L 数据数据加工解析数据结构 → 转换应用数据企业应用系统为便于问题的阐述,仍然以实现方式 1 中的实例为例。假设源数据有一个通讯录表,其表名为 AddressBook,表结构为字段名 类型string strXmlData2 = strXmlData;MemoryStream msXmlData2=new MemoryStream(System.Text.Encoding.UTF8.GetBytes(strXmlData2));dtAddressBook2.ReadXml(msXmlData2);#endregion 应用端将组织成为Xml格式的数据转化为应用数据Name StringQQ String数据只有 2 行,Name QQ张艳国 183585478张敬新 267282830首先,先组织成为源数据,代码如下:#region 源数据//数据结构DataTable dtAddressBook = new DataTable("AddressBook");dtAddressBook.Columns.Add(new DataColumn("Name",Type.GetType("System.String")));dtAddressBook.Columns.Add(new DataColumn("QQ", Type.GetType("System.String")));//数据体dtAddressBook.Rows.Add("张艳国", "183585478");dtAddressBook.Rows.Add("张敬新", "267282830");#endregion 源数据这样,数据就成为了 DataTable 表类型的数据了,一般在 oracle 等数据库中使用的数据,都可以以这种方式转化为.NET 下的 DataTable 表类型数据,但有些系统不能够使用 DataTable 表类型数据,例如Silverlight 端开发过程,这就需要将其生成中间数据体,例如 XML 格式体数据。下面的代码生成源数据结构信息数据及 XML 格式体数据:#region 数据体组织成为带有结构信息的Xml格式数据//表结构string strXmlStructure = "";using (MemoryStream ms = new MemoryStream()){dtAddressBook.WriteXmlSchema(ms);ms.Seek(0, SeekOrigin.Begin);using (StreamReader sr = new StreamReader(ms)){string dtXml = sr.ReadToEnd();strXmlStructure = dtXml;}}//表数据string strXmlData = "";using (MemoryStream ms = new MemoryStream()){dtAddressBook.WriteXml(ms);ms.Seek(0, SeekOrigin.Begin);using (StreamReader sr = new StreamReader(ms)){ string dtXml = sr.ReadToEnd();strXmlData = dtXml;}}//带有表结构及数据的XML数据XmlDocument d1 = new XmlDocument();d1.LoadXml(strXmlStructure);//表数据XmlDocument d2 = new XmlDocument();d2.LoadXml(strXmlData);XmlDocument doc = new XmlDocument();doc.LoadXml(@"");XmlNode root = doc.DocumentElement;XmlNode root1 = doc.ImportNode(d1.DocumentElement, true);XmlNode root2 = doc.ImportNode(d2.DocumentElement, true);root.AppendChild(root1);root.AppendChild(root2);string xml = root.OuterXml;#endregion 数据体组织成为带有结构信息的Xml格式数据这样组织加工成的源数据结构数据如下:这样组织加工成的数据如下:这样组织加工成带有源数据结构信息及数据的 XML 数据如下:从成带有源数据结构信息及数据的 XML 数据中,抽取出结构信息,构建企业应用系统数据的结构表,再从 XML 数据中抽取出数据添加到应用系统数据表中。下面的代码是具体的实现:#region 应用端将组织成为Xml格式的数据转化为应用数据string xml2 = xml;string head = "";int ih = xml2.IndexOf(head);int ie = xml2.IndexOf(end);string strXmlStructure2 = xml2.Substring(ih, ie - ih + end.Length);DataTable dtAddressBook2 = new DataTable();MemoryStream msXmlStructure2 = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(strXmlStructure2));dtAddressBook2.ReadXmlSchema(msXmlStructure2);head = "";end = "";ih = xml2.IndexOf(head);ie = xml2.IndexOf(end);string strXmlData2 = xml2.Substring(ih, ie - ih + end.Length);MemoryStream msXmlData2 = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(strXmlData2));结语上述论述,只是我在进行项目开发过程中的一些模型化的提炼和抽象,旨在便于说明问题和思想,其中还有很多细节性的问题需要进一步优化,敬请指教。dtAddressBook2.ReadXml(msXmlData2); #endregion 应用端将组织成为Xml格式的数据转化为应用数据
展开阅读全文
  石油文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:自标准数据案例(大庆油田 张敬新)
链接地址:http://www.oilwenku.com/p-70066.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
copyright@ 2016-2020 石油文库网站版权所有
经营许可证编号:川B2-20120048,ICP备案号:蜀ICP备11026253号-10号
收起
展开