好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

接口

接口

构ASP.NET程序----接口

看过前一篇博文 http://HdhCmsTestcnblogs测试数据/insus/archive/2013/04/21/3029483.html  的网友,都大约知道,重构asp.net程序过程,使用了继承的方法。说实在的,Insus.NET不太喜欢在程序中使用继承。因为继承在应用,由于本身的原因,很多问题无法解决,或是运行自如。就如上一篇中,每个网页还是有很多相同的代码,无法拿掉。接下来,Insus.NET想使用接口方式重新对上一篇的原程序重新重构一次,望网友又能从中学习到其中一些开发知识。

仔细看看App_Code目录下的Unitcode1 ~ UnitCode4个类别,均有相似之处。Insus.NET在重构它们之前,先创建一个接口,然后去让这四个类别来实作这个接口:


这个接口与前一篇的基类不一样,毕竟一个是接口一个类,但有一点值得注意的是属性中,多一个主键字段的属性相关的

  string   UnitCode
        {
              get  ;
              set  ;
        } 


在继承中,它没有办法抽取出来。现在写成接口之后,它可以了。接下来,我们分别对App_Code目录下的UnitCode1 ~ UnitCode4类别实作刚才的好写的接口,步骤有1,2,3


接下来,是对UnitCode1.aspx.cs ~ Unitcode4.aspx.cs的主键由Unit1~Unit4均改为UnitCode:
 

 
紧跟着看到的是每页aspx的GridView的ID,DataKeyNames,以及OnRowEditing,OnRowCancelingEdit,OnRowUpdating,OnRowDeleting事件名称不一样,最后是绑定主键时,不相同,其余的均一样。

 
为解让每个网页这些不一致的地方,改为一样,得动一些手脚,删除箭头所指的数字。

每个UnitCode1~3.aspx.cs的事件中,也应该修改,参考下图,把箭头的数据全删除:



全部改完之后,所有UnitCode1~4.aspx只差下图高亮位置的差异了:



改为动态产生或是加载是。在GridView中,去掉DataKeyNames="Unit1"属性。在显示ItemTemple中,改为一个标签,并为GridView添加一个事件 OnRowDataBound="GridViewUnitCode_RowDataBound"。

 重构到这里,我们已经完成一半的工作量了。接下来,我们将创建一个用户控件[UnitCodeForm.ascx]
由于四个.aspx均一样,那随便打开一个,把:

View Code

html剪下,并帖至UnitCodeForm.ascx去,留下:


在.aspx.cs中的代码,如下:

View Code


也切下粘贴至UnitCodeForm.ascx.cs中去,此时,你尝试去行程序时,肯定会有很多错误,因为粘帖过去的,仅是其中一个实例。而原程序中是有四个实例。
OK,这个不是问题,因为重构一开始,我们就写了接口,四个类别也分别实作了那个接口。
处理这个问题,我们使用多态来解决它。




到这里,还是有一个小问题,就是,在每个网打开时,我们要让程序知道我们要处理的那一个UnitCode1 ~ UnitCode4中的那一个?
那可以从网页传一个参数给用户控件即可,当用户控件接收到此参数,就知道是谁发出的命命令了。怎样传,怎样接收呢?是否有看到最原始的程序中,已经有一个接口了,对,我们就用那个接口:

ISetValable

 用户控件UnitCodeForm.ascx.cs实作这个接口:


把用户控件拉进每个网页中:

参考下面动画,把每个页面的参数传用户控件中去:

 


然后,把下面的方法写入用户控件中:

 private   void   Data_Binding()
    {   
          this .GridViewUnitCode.DataSource =  objUnitCode1.GetAll();
          this  .GridViewUnitCode.DataBind();
    } 

 
把这句也写入用户控件中去:

    InsusJsUtility objInsusJsUtility =  new  InsusJsUtility();

 现在我们需要参考下图高亮语句,写入用户控件:

  上图16行,是宣告一个变量,将是主键值。19行是把从网页传过来的参数存储入变量ucs中。21是使用反射和多态。22行是keyName。
接下来,我对所有.aspx.cs中的objUnitCode1均改objUnitCode。

最后一个动作,就是:


添加上面一句,为GridView动态添加主键。

OK,重构完毕,本次重构,应用了接口,然后可以轻易把四个网页搬移至一个用户控件中去。其中有应用了开发中的多态,以及反射技术。

下面是重构完毕的源程序:
http://download.cnblogs测试数据/insus/ASPDOTNET/Ref_Org_interface.rar

 

当前标签: Refactoring

共2页: 1  2   下一页  

重构ASP.NET程序----接口

 

重构ASP.NET程序----继承

 

减少程式的if和else,重构你的程式

 

重构《Repeater控件动态变更列(Header,Item和Foot)信息》

 

C#用什么方法可以减少或不使用switch

 

导航条的重构

 

重构代码2

 

重构代码

 

文章的上一篇和下一篇导航 V2

 

重构可让SQL提高可维护性,可读性以及效能性

 

轻量级更换类(Class)

 

把选中Gridview的记录显示出来 Ver2

 

[重构]把程序写得更简洁,更好维护

 

把C#逻辑处理程序搬移至SQL存储过程中去

 

CTE中使用参数

 

使用CTE替换派生表语法

 

接口(Interface)替代抽象(Abstract)

 

书------编程(其他)

 

Refactoring Session

 

Refactoring Connection To Sql

 

共2页: 1  2   下一页

 

分类:  ASP.NET ,  interface ,  C# ,  MS SQL ,  Refactoring ,  Reflection ,  Stored Procedures ,  UserControl

标签:  Refactoring ,  UserControl ,  Interface ,  Reflection

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于接口的详细内容...

  阅读:38次