原IBM架构师--李翊

现东方标准 java高级软件工程师讲师

李翊ID:oristand_ly
[修改头像]
48488次访问,排名1803好友0人,关注者50
原IBM中国研究中心(IBM China Lab)系统架构师,曾经负责过的主要项目包括:清华紫光 “Petri网试验模型系统”、“国务院办公厅信息系统”、“河南省级电信计费系统”、“ePod企业级电子商务解决方案”,并负责多个省级考试中心信息系统。现任东方标准人才服务有限公司JAVA软件工程师职业讲师。
oristand_ly的文章
原创 14 篇
翻译 0 篇
转载 0 篇
评论 81 篇
oristand_ly的公告
java菜鸟 QQ群:50964475 只加新手 赴日软件开发QQ群: 6392676 嵌入式linuxQQ群:58137560
最近评论
hehegujinhe:厚积薄发!
boogood:努力努力再努力啊哈哈
camonanesi:牛* 最远的距离不是电信和网通的距离 是我和构架师的距离
xmc010:顶!
gthacker:呵呵 努力!!!
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    东方标准的学员们
    友情链接
    东方标准 IT人才服务
    计算机职业技能考试nit-pro
    存档

    原创 ADO.net与PowerBuilder

    新一篇: 软件架构师成长之路

     
    以评测的形式通过一个非常简单的例子,把ADO.NET与PowerBuilder进行多方面的比较,从而揭示两种平台下数据库应用开发能力,包括功能、性能、体系结构的综合评价。

            .NET框架提供了强大的WINDOWS FORMS 工具,可以快速开发用户界面。
    同时,.NET框架提供了丰富的对象用来管理数据库操作,这些类总称为ADO.NET,ADO.NET主要是一种非连接型的数据架构。在非连接型架构中,数据从数据库中取出,缓存在本地机器中,可以在本机上处理数据,仅在改变记录或获取新数据时才与数据库连接。数据库连接要占用大量资源,数据架构与数据库不保持连接最大的好处就是比较节省资源。非连接型数据对象的工作模式与WEB 很像。所有WEB会话都是非连接型的,状态不会在不同的页面请求之间保留,因此非连接型数据架构与WEB的配合更清晰。
       PowerBuilder是著名的数据库应用开发工具生产厂商PowerSoft公司推出的产品(PowerSoft现已被数据库厂商Sybase所收购),它完全按照客户机/服务器体系结构研制设计,在客户机/服务器结构中,它使用在客户机中,作为数据库应用程序的开发工具而存在。由于PowerBuilder采用了面向对象和可视化技术,提供可视化的应用开发环境,使得我们利用PowerBuilder(后面简称PB),可以方便快捷地开发出利用后台服务器中的数据和数据库管理系统的数据库应用程序。


    1、编程效率(主要从windows forms 快速开发评测)。
    2、数据表现形式。(主要从windows forms 快速开发评测)
    3、数据操纵。(主要从ADO.NET连接数据库,操纵数据库数据评测)
    4、ADO.NET事务处理,连接池的使用,通过使用System.Data.SqlClient/OracleClient 命名空间,改变连接字符串,测试数据检索速度。
    5、定性评价:远程访问等。


    开发一个数据库程序
    1、 利用WINDOWS FORMS 开发程序界面。
    程序界面主要使用数据绑定控件DATAGRID,文本框,标签等常用控件,将数据库中的数据表现出来。和PB比较开发效率。
    2、 利用ADO.NET 连接数据库,操纵数据库中数据。
    通过ADO.NET连接到本机数据库中的表“GLDW”,使用ADO.NET对象模型中DATASET对象和DATAADAPTER对象,实现数据检索,数据更新,数据添加,数据删除等功能。并和PB中DATAWINDOW这方面功能进行比较,指出两者的区别。用具体数据量做比较。
    测试用例编码:
    首先需要连接数据库:
    数据库连接方法1:(使用OLEDB,名字空间System.Data.OleDb)
    string connectstr="Provider = MSDAORA.1;Password=gdmis;User ID=gdmis;Data Source=ms_fengguol.bj.xjgc.com";
                 string conmmandstr="select * from gldw";
    OleDbDataAdapter myDataAdpater = new OleDbDataAdapter (conmmandstr,connectstr);
    数据库连接方法2:(使用.net Data Provider,名字空间System.Data.OracleClient
    String connectstr=" Password=gdmis;User ID=gdmis;Data Source=ms_demo";
                string conmmandstr="select * from gldw ";
        OracleDataAdapter myDataAdpater = new OracleDataAdapter (conmmandstr,connectstr);
     
    连接数据库后,生成数据集,检索数据只要用一行编码:dataAdapter1.fill(dataSet11);
    实现添加功能的代码:
    DataRow newRow = dataSet11.Tables ["gldw"].NewRow ();
                  newRow["dwbm"] = textDWH.Text ;
                  newRow["dwmc"] = textDWMC.Text ;
                  newRow["bz"] = textBZ.Text ;
                  newRow["sqbm"] = textSQM.Text ;
                  newRow["id"] = textID.Text ;
                   dataSet11.Tables ["gldw"].Rows .Add (newRow);
                  oleDbDataAdapter1.Update (dataSet11,"gldw") ;
                  Application.DoEvents ();
                  dataSet11.AcceptChanges ();
    实现删除功能的代码:
    dataSet11.Tables ["gldw"].Rows [dataGrid1.CurrentRowIndex ].Delete ();
                  oleDbDataAdapter1.Update (dataSet11,"gldw");
    dataSet11.AcceptChanges ();
    实现更新功能的代码:
    oleDbDataAdapter1.Update (dataSet11,"gldw");
         dataSet11.AcceptChanges (); 
     
    测试结果:
    1、用户界面。
    对比项
    Vs.net
    Powerbuider
    体系结构
    基于控件和容器
    基于控件和容器
    Datagrid VS Datawindow
    控件本身支持记录的多条选定,记录排序,控件根据窗体自动调整大小。
    需要编程来实现
    面向对象特性
    支持可视化继承
    支持可视化继承
    主表/从表关联
    只需要在DATASET中增加一个DATARELATION .(如测试用例界面所示)
    需要手工拷贝或者共享,需要编写代码进行控制主表/从表的同步。
    动态控制
    每一个控件都有动态特性:程序部署以后,可以通过配置文件控制控件外观及行为,不用编写代码。如:改变某一按钮的名称,让某一按钮不可见/可见。
    无此功能
    结论
    利用VS.NET 的 windows forms 可以快速,高效,高质量的开发用户界面。
    PB 中开发用户界面效率一般。
     
    3、 数据访问。   
    对比项
    ADO.NET
    PB DATAWINDOW
    连接池
    自动管理连接池
    无此内容
    数据获取
    三种: DATAREADER(连接型游标),DATASET(非连接型数据集,包括DataTable, DataView)DATAADAPTER(连接管理)。
    两种:DATAWINDOW, DATASTORE
    连接方式
    支持多种连接方式和可视化连接,需要代码非常少。
    必须在程序中用代码连接。
    数据操纵速度(1)数据集
    通过OLEDB,因为要和COM做互操作,数据检索速度效果不好, 产生这种效果同时和DATASET 的架构有关:DATASET 由 一组DATATABLE对象和一组 DATARELATION 对象组成,相当于一个小数据库,比PB的datawindow复杂,这样功能更多更强,比如处理主表——从表关系。数据适配器调用fill() 方法向数据集填充数据时,包含打开连接,填充数据,关闭连接。
    通过.net Data Provider,数据检索速度有明显改善,基本与PB 持平。
    检索操作:
    测试数据(基于.net Data Provider):gldw表(3条记录,时间:1秒),yhzqk表(45018条记录,时间:37秒),cw02表(7084条记录,时间:13秒)。
    数据更新,数据删除速度非常快.因为更新数据、删除数据时,其实现方式与PB相同,都是形成SQL语句,其执行效率也一样。
    数据处理速度非常快,包括数据检索,数据更新,数据删除。主要因为DATAWINDOW只是一个二维表的缓冲区,只能包含一个表,或者一个视图。
    测试数据:gldw表(3条记录,时间:1秒),yhzqk表(45018条记录,时间:33秒),cw02表(7084条记录,时间:11秒)。
    数据操纵速度(1)游标
    DATAREADER是ADO.NET提供的一种连接型的高效游标,用来从数据库中检索只读,只进的数据流。测试时,通过DATAREADER把数据读出来写入一个LISTBOX.
    测试数据:
    CW02表(7084条记录,时间:7秒),YHZQK表(45018条记录,时间:28秒)
    PB中通过声明CURSOR把数据读出来写入一个LISTBOX
    测试数据:
    CW02表(7048条记录,时间:5秒),YHZQK表(45018条记录,时间:58秒)
     
    4、 数据表现形式。ADO.net的数据表现形式不是很丰富,没有PB的数据窗口丰富。
    对比项
    Vs.net
    PB datawindow
    Grid表现形式
    支持
    支持
    自由形式
    支持
    支持
    丰富文本形式
    不支持
    支持
    分组表现样式
    不支持
    支持
    标签表现样式
    不支持
    支持
    交叉表样式
    不支持
    支持
    组合样式
    不支持
    支持
    树型样式
    支持
    支持
     
    5、 连接池:(无法对比,因为PB没有此功能。此处只是说明连接池的创建,移除过程。)
    创建:OLE DB .NET 数据提供程序使用 OLE DB 会话池来自动管理连接池,当连接打开时,将根据一种精确的匹配算法来创建连接池,该算法会使连接池与连接中的字符串相关联。每个连接池都与一个不同的连接字符串相关联。当新连接打开时,如果连接字符串不精确匹配现有池,则将创建一个新池。连接池是为每个唯一的连接字符串创建的。当创建一个池后,将创建多个连接对象并将其添加到该池中,以满足最小池大小的要求。连接将根据需要添加到池中,直至达到最大池大小。
    移除:如果连接生存期已过或者池管理程序检测到与服务器的连接已被断开,则对象池管理程序将从池中移除该连接。请注意,只有在尝试与服务器进行通讯后,才可以检测到这种情况。如果发现某连接不再连接到服务器,则会将其标记为无效。对象池管理程序会定期扫描连接池,以查找已被释放到池中并标记为无效的对象。找到后,这些连接将被永久移除。在编程过程中尽可能短的时间使用连接,要及时的关闭连接。关闭连接后,自动放入连接池。
    6、 事务处理
    PB必须手工实现事务处理,如回滚等。
    ADO.NET 中有两种事务处理方法:
    手工事务:用SqlConnection.BeginTransaction 方法来启动事务,返回关联的SqlTransaction 对象。将事务对象关联到参与事务的命令上,用SqlTtansaction.Commit 方法提交事务,用SqlTransaction.Rollback 方法来回滚事务。此过程与PB相同。
    自动事务:自动事务是COM+ 提供的一个服务,如果要使用此服务,类需要遵从:1、必须直接或间接从SystemEnterpriseServicedComponent派生。2、将TransactionAttribute 应用此类来控制类的事务行为。3、使用强名称为组件签名。4、将[AutoComplete] 特性(属性信息)应用于类中的方法。如果含有[AutoComplete] 特性的方法调用完成而没有错误,则事务被提交,否则被回滚。
    测试过程记录:
            开始用时c#做自动事务测试实例,在使用强名为组件签名时,编译时出现“重复属性[assembly: AssemblyKeyFile("f:\\complusexample1.snk")]”错误。用vb.net 做测试实例,一切正常。
             仔细研究C# 发现工程中自己生成的文件:AssemblyInfo.cs中已经包含[assembly: AssemblyKeyFile("")]条目,把此条目改为:[assembly: AssemblyKeyFile("f:\\complusexample1.snk")],同时,去掉在ComPlusExample1 中的对应属性信息。
             using System;
    using System.EnterpriseServices ;
    using System.Reflection ;  
    ///[assembly: AssemblyKeyFile("f:\\complusexample1.snk")](此部件属性信息要放到AssemblyInfo.cs文件中。)
     [assembly:ApplicationName("ComPlusExample1")]
    namespace ComPlusExample1
    {   
    [Transaction(TransactionOption.Required )]public class ComPlusExample1 : ServicedComponent
              {
             public ComPlusExample1():base()
             {            
             }   
             [AutoComplete] public string DoTrans()
             {
                  return "my god!";     
             }   
             }
    }
     
    7、远程访问:
    ADO 的 远 程 数 据 访 问(RDS) 功 能 是能 够 通 过 一 个 往 返 传 输 将 数 据 从 服 务 器 移 动 到 客 户 端 应 用 程序 或Web 页 中, 然 后 在 客 户 端 对 数 据 进 行 操 作, 最 后 将 更 新 数 据 返 回服 务 器。
    而ADO.NET是一种非连接型的数据架构,数据从数据库取出,缓存在本地机器中,所以从ADO.NET的架构本身就很好的支持远程数据访问。


    VS.NET 的WINDOWS FORMS 在用户界面开发上比PB有明显的快捷性,高效性,而且更丰富。在代码量方面,VS.NET 稍强于PB;在速度与数据表现形式方面,VS.NET 稍微逊色于PB
    由于体系结构上的差异,VS.NET的功能更为强大。VS.NET在数据库连接方面,通过自动管理连接池,配合数据适配器,数据集等,提供了更加灵活,更加强大,更加适合分布式/多层软件系统的方法。事务处理不但支持常用的手工处理方式,同时还提供了自动事务处理机制,降低了开发人员出错的概率。
     
     

    发表于 @ 2007年07月24日 14:25:00|评论(loading...)|编辑

    旧一篇: 东方标准好男儿,远赴海外闯天下

    评论

    #playcity 发表于2007-09-15 09:03:58  IP: 60.22.86.*
    基本客观,但对datawindow的强大的表现能力说明较少,如直接做为报表打印功能.如子数据窗口功能等.
    #poter1 发表于2007-10-02 11:13:18  IP: 218.66.45.*
    真是不错,我真是个门外汉啊!哈哈。
    #ktcserver 发表于2007-10-12 16:49:53  IP: 220.163.11.*
    虽然ADO.NET比PB在查询速度上略微慢了一点。但从数据架构和开发模式上必将比PB更胜一筹。PB虽然DATAWINDOW很强大但对数据库的依赖比较大,而且数据操作过程几乎都是在客户端完成的,其网络传输业务流量会随着数据量的增加而变大,从而引发延时严重。PB的团队开发能力和分布式部署能力上明显比ADO.NET开发的系统弱了点。
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © oristand_ly