现在的位置: 首页 > 综合 > 正文

一个实际项目的重构例子

2012年08月07日 ⁄ 综合 ⁄ 共 13466字 ⁄ 字号 评论关闭

为了加深大家对重构的直观认识,我在这里贴上自己开发项目的一个实际例子.
如果能让大家对重构这项优化代码的技术多一点认同,心满意足.

代码下载:here

重构前:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

using Pinnacle.Prison.Model;
using Pinnacle.Prison.Client;
using Pinnacle.Prison.IServer;

namespace Pinnacle.Prison.PrisonWin
{
   
public partial class Logout : UserControl
   {
      String icCardStr 
= null;
      TICCard icCard 
= new TICCard();
      GroupInfo groupTemp 
= null;
      List
<VisitorInfo> listVisitor = null;

      public Logout()
      {
         InitializeComponent();
         btnPass.Enabled 
= false;
      }

        /// <summary>
        
/// 全组人资料处理
        
/// </summary>
        
/// <param name="group"></param>
        internal void HandleGroup(GroupInfo group)
        {
            
if (group != null)
            {
                
this.icCardStr = group.ICCard.ICCardValue;
                
this.groupTemp = group;
                
if (group.ICCard.ICCardOwner == ICCardOwner.GuiderPliceMan)
                    listVisitor 
= group.Visitors;

                ShowInfo(group);

            }
        }

      // 验证,注销IC卡状态
      private void btnPass_Click( object sender, EventArgs e )
      {
         Boolean icCardStatus 
= false;

         if(groupTemp.ICCard.ICCardOwner == ICCardOwner.Visitor && groupTemp.ICCard.Status == ICCardStatus.OutPrison)//访问者
         {
            
if(!string.IsNullOrEmpty( txtIDNumber.Text ))//判断带头警员有没打卡,如果有。。。
            {
               
for(int i = 0 ; i < listVisitor.Count ; i++)
               {
                  
if(dgVisitorList.Rows[i].Cells[3].Value.ToString() != groupTemp.Visitors[0].IdNumber)//判断打卡人在不在访问人员列表中,如果不在。。。
                  {
                     lblICCardMsg.Text 
= "验证失败!查无此人!!!";
                     btnPass.Enabled 
= false;
                  }
                  
if(dgVisitorList.Rows[i].Cells[3].Value.ToString() == groupTemp.Visitors[0].IdNumber)//判断打卡人在不在访问人员列表中,如果在。。。
                  {
                     icCardStatus 
= icCard.UpICCardStatus( icCardStr );//发送验证注销请求
                     if(icCardStatus == true)//如果成功。。。
                     {
                        listVisitor.Remove( listVisitor[i] );
                        i
--;
                        BindingSource bindingsource 
= new BindingSource();
                        bindingsource.DataSource 
= listVisitor;
                        dgVisitorList.AutoGenerateColumns 
= false;
                        dgVisitorList.DataSource 
= bindingsource;
                        clearInfo( groupTemp );
                        
return;
                     }
                  }
               }
            }
                
else//判断带头警员有没打卡,如果没有。。。
            {
               lblICCardMsg.Text 
= "错误!请带头警员先打卡!!!";
               btnPass.Enabled 
= false;
            }
         }
         
else if(groupTemp.ICCard.ICCardOwner == ICCardOwner.CommonPliceMan && groupTemp.ICCard.Status == ICCardStatus.OutPrison)//普通警员
         {
            icCardStatus 
= icCard.UpICCardStatus( icCardStr );
            
if(icCardStatus == true)
               clearInfo( groupTemp );
            
else
            {
               lblICCardMsg.Text 
= "验证失败!请重试!!!";
               btnPass.Enabled 
= true;
            }
         }
         
else
         {
            lblICCardMsg.Text 
= "验证失败!请重试!!!";
            btnPass.Enabled 
= true;
         }
//end if
      }

        //显示IC卡和身份证资料界面
        private void ShowInfo(GroupInfo group)
        {
            
if (group.ICCard.ICCardOwner == ICCardOwner.Visitor && group.ICCard.Status == ICCardStatus.OutPrison)//访问者
            {
                showVisitorInfo(group);

                for (int i = 0; i < dgVisitorList.RowCount; i++)
                {
                    
if (dgVisitorList.Rows[i].Cells[0].Value.ToString() == txtVisitorName.Text)
                        dgVisitorList.Rows[i].DefaultCellStyle.BackColor 
= Color.Green;
                }
                txtProperty.Text 
= "访问者";
                lblVisitorMsg.Text 
= "";
                lblICCardMsg.Text 
= "资料读取成功!请验证!";
                txtState.Text 
= "使用中";
                txtLogOut.Text 
= "未注销";
                btnPass.Enabled 
= true;
            }
            
else if (group.ICCard.ICCardOwner == ICCardOwner.CommonPliceMan && group.ICCard.Status == ICCardStatus.OutPrison)//普通警员
            {
                showPliceManInfo(group);

                txtProperty.Text = "工作警员";
                txtState.Text 
= "使用中";
                txtLogOut.Text 
= "未注销";
                btnPass.Enabled 
= true;
            }
            
else if (group.ICCard.ICCardOwner == ICCardOwner.GuiderPliceMan && group.ICCard.Status == ICCardStatus.OutPrison)//带头警员
            {
                showPliceManInfo(group);

                dgVisitorList.AutoGenerateColumns = false;
                dgVisitorList.DataSource 
= listVisitor;

                grpIDData.Text = "带头警员身份证资料";
                txtProperty.Text 
= "带头警员";
                lblVisitorMsg.Text 
= "其他访问人员请打卡!";
                txtState.Text 
= "使用中";
                txtLogOut.Text 
= "未注销";
                lblVisitorsMsg.Text 
= "";
                btnPass.Enabled 
= false;

                clearVisitroInfo();
            }//end if
            lblICCardMsg.Text = "";
        }
        
//显示警员身份资料
        private void showPliceManInfo(GroupInfo group)
        {
            txtPliceNum.Text 
= group.PliceMan.PliceManId.ToString();
            txtName.Text 
= group.PliceMan.Name;
            txtSex.Text 
= group.PliceMan.Sex;
            txtFolk.Text 
= group.PliceMan.Folk;
            txtYear.Text 
= group.PliceMan.Birthday;
            txtAddress.Text 
= group.PliceMan.Address;
            txtIDNumber.Text 
= group.PliceMan.IdNumber;
            txtDepartment.Text 
= group.PliceMan.SignDepartment;
            txtValidTerm.Text 
= group.PliceMan.ValidTerm;
            imgPhoto.Image 
= group.PliceMan.Photo;
        }
        
//显示访问者身份资料
        private void showVisitorInfo(GroupInfo group)
        {
            txtVisitorName.Text 
= group.Visitors[0].Name;
            txtVisitorSex.Text 
= group.Visitors[0].Sex;
            txtVisitorFolk.Text 
= group.Visitors[0].Folk;
            txtVisitorYear.Text 
= group.Visitors[0].Birthday;
            txtVisitorAddress.Text 
= group.Visitors[0].Address;
            txtVisitorIDNumber.Text 
= group.Visitors[0].IdNumber;
            txtVisitorDepartment.Text 
= group.Visitors[0].SignDepartment;
            txtVisitorValidTerm.Text 
= group.Visitors[0].ValidTerm;
            imgVisitorPhoto.Image 
= group.Visitors[0].Photo;
        }

      // 清除资料界面显示
        private void clearInfo(GroupInfo group)
        {
            
if (group.ICCard.ICCardOwner == ICCardOwner.Visitor)//访问者
            {
                clearVisitroInfo();
                lblICCardMsg.Text 
= "验证通过!";
                
if (dgVisitorList.Rows.Count != 0)
                    lblICCardMsg.Text 
= "验证通过!请其他访问人员继续打卡!";
            }
            
else//警员
            {
                clearIDInfo();
                lblICCardMsg.Text 
= "验证通过!";
            }
            txtProperty.Text 
= "";
            txtState.Text 
= "未使用";
            txtLogOut.Text 
= "已注销";
            btnPass.Enabled 
= false;
        }
        
//清除警员身份资料
        private void clearIDInfo()
        {
            txtPliceNum.Text 
= "";
            txtName.Text 
= "";
            txtSex.Text 
= "";
            txtFolk.Text 
= "";
            txtYear.Text 
= "";
            txtAddress.Text 
= "";
            txtIDNumber.Text 
= "";
            txtDepartment.Text 
= "";
            txtValidTerm.Text 
= "";
            imgPhoto.Image 
= null;
        }
        
//清除访问者身份资料
        private void clearVisitroInfo()
        {
            txtVisitorName.Text 
= "";
            txtVisitorSex.Text 
= "";
            txtVisitorFolk.Text 
= "";
            txtVisitorYear.Text 
= "";
            txtVisitorAddress.Text 
= "";
            txtVisitorIDNumber.Text 
= "";
            txtVisitorDepartment.Text 
= "";
            txtVisitorValidTerm.Text 
= "";
            imgVisitorPhoto.Image 
= null;
        }
   }
}


重构后:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

using Pinnacle.Prison.Model;
using Pinnacle.Prison.Client;
using Pinnacle.Prison.IServer;

namespace Pinnacle.Prison.PrisonWin
{
   
public partial class Logout : UserControl
   {
      String icCardStr 
= null;
      TICCard icCard 
= new TICCard();
      GroupInfo groupTemp 
= null;
      List
<VisitorInfo> listVisitor = null;

      public Logout()
      {
         InitializeComponent();
         btnPass.Enabled 
= false;
         dgVisitorList.AutoGenerateColumns 
= false;
      }

      /// <summary>
      
/// 全组人资料处理
      
/// </summary>
      
/// <param name="group"></param>
      internal void HandleGroup( GroupInfo group )
      {
         
if(group != null)
         {
            
this.icCardStr = group.ICCard.ICCardValue;

            this.groupTemp = group;

            if(group.ICCard.ICCardOwner == ICCardOwner.GuiderPliceMan)
               listVisitor 
= group.Visitors;

            ShowInfo( group );
         }
      }

      

      // 验证,注销IC卡状态
      private void btnPass_Click( object sender, EventArgs e )
      {    
         
//访问者
         if(IsVisitor( groupTemp.ICCard ))
         {
            
//带头警员没打卡,
            if(txtProperty.Text != "带头警员")
            {
               ShowMsgHandle( 
"错误!请带头警员先打卡!!!"false );
               
return;
            }

            int visitorIndex = 0;

            //如果带头警员有打卡
            for(int i = 0 ; i < listVisitor.Count ; i++)
            {
               
//打卡人在访问人员列表中
               if(dgVisitorList.Rows[i].Cells[5].Value.ToString() == groupTemp.Visitors[0].IdNumber)
               {
                  visitorIndex 
= i;
               }
            }
//--------end for-------------

            //如果打卡人不在访问人员列表中
            if(visitorIndex == 0)
            {
               ShowMsgHandle( 
"验证失败!查无此人!!!"false );
               
return;
            }

            //----a.打卡人在访问人员列表中
            
//验证注销失败
            if(icCard.UpICCardStatus( icCardStr ) == false)
            {
               ValidateFailed();
               
return;
            }

            //验证成功
            listVisitor.Remove( listVisitor[visitorIndex] );

            //重新绑定数据
            ReBindGridView( listVisitor );

            //清除
            ClearInfo( groupTemp.ICCard.ICCardOwner );           

            //----a

         }
         
else if(IsCommonPliceMan( groupTemp.ICCard ))//普通警员
         {
            
//验证注销失败
            if(icCard.UpICCardStatus( icCardStr ) == false)
            {
               ValidateFailed();
               
return;
            }

            //清除
            ClearInfo( groupTemp.ICCard.ICCardOwner );

         }
         else
         {
            ValidateFailed();
         }
//end if
      }

      //显示IC卡和身份证资料界面
      private void ShowInfo( GroupInfo group )
      {
         
if(IsVisitor( group.ICCard ))//访问者
         {
            ShowVisitorInfo( group.Visitors[
0] );

            for(int i = 0 ; i < dgVisitorList.RowCount ; i++)
            {
               
if(dgVisitorList.Rows[i].Cells[0].Value.ToString() == txtVisitorName.Text)
                  dgVisitorList.Rows[i].DefaultCellStyle.BackColor 
= Color.Green;
            }

            ShowMsgHandle( "资料读取成功!请验证!"true );
         }
         
else if(IsCommonPliceMan( group.ICCard ))//普通警员
         {
            ShowPliceManInfo( group.PliceMan );            
            txtProperty.Text 
= "普通警员";
            txtState.Text 
= "使用中";
            btnPass.Enabled 
= true;
         }
         
else if(IsGuiderPliceMan( group.ICCard ))//带头警员
         {
            ShowPliceManInfo( group.PliceMan );
            txtProperty.Text 
= "带头警员";
            txtState.Text 
= "使用中";
            grpIDData.Text 
= "带头警员信息";
         
            dgVisitorList.DataSource 
= listVisitor; 

            ShowMsgHandle( "其他访问人员请打卡!"false );

            ClearVisitroInfo();
         }//end if
      }

      //显示警员身份资料
      private void ShowPliceManInfo( PliceManInfo pliceMan )
      {
         txtName.Text 
= pliceMan.Name;
         txtSex.Text 
= pliceMan.Sex;
         txtFolk.Text 
= pliceMan.Folk;
         txtYear.Text 
= pliceMan.Birthday;
         txtAddress.Text 
= pliceMan.Address;
         txtIDNumber.Text 
= pliceMan.IdNumber;
         txtDepartment.Text 
= pliceMan.SignDepartment;
         txtValidTerm.Text 
= pliceMan.ValidTerm;
         imgPhoto.Image 
= pliceMan.Photo;
         txtPrison.Text 
= pliceMan.PrisonID.ToString();//显示警员的所在监区
      }

      //显示访问者身份资料
      private void ShowVisitorInfo( VisitorInfo visitor )
      {
         txtVisitorName.Text 
= visitor.Name;
         txtVisitorSex.Text 
= visitor.Sex;
         txtVisitorFolk.Text 
= visitor.Folk;
         txtVisitorYear.Text 
= visitor.Birthday;
         txtVisitorAddress.Text 
= visitor.Address;
         txtVisitorIDNumber.Text 
= visitor.IdNumber;
         txtVisitorDepartment.Text 
= visitor.SignDepartment;
         txtVisitorValidTerm.Text 
= visitor.ValidTerm;
         imgVisitorPhoto.Image 
= visitor.Photo;
         txtVisitorPrison.Text 
= visitor.PrisonID.ToString();//显示访问者访问的所在监区
         txtVisitorProperty.Text = "访问者";
         txtVisitorState.Text 
= "使用中";
      }

      // 清除资料界面显示
      private void ClearInfo( ICCardOwner owner )
      {
         String msg 
= "";
         
if(owner == ICCardOwner.Visitor)//访问者
         {
            ClearVisitroInfo();
            txtVisitorProperty.Text 
= "";
            txtVisitorState.Text 
= "已注销";
            txtVisitorPrison.Text 
= "";
            msg 
= "验证通过!";
            
if(dgVisitorList.Rows.Count != 0)
               msg 
= "验证通过!请其他访问人员继续打卡!";
         }
         
else//警员
         {
           

抱歉!评论已关闭.