• 与继承相关的一些重构(二)


    5.提取主类:提取一个基类,抽象出共有方法,比较常用的重构,这里的基类也许并不存在,需要自己新建立。

     用法场景:当有一个类中的某个方法需要经常被其他的类调用的时候,说明这个方法重用率很高,可以考虑把它抽象出来,放到一个基类中。

    //重构前
    publicclass Dog
    {
      
    publicvoid EatFood()
      {
        
    // eat some food
      }

      
    publicvoid Groom()
      {
        
    // perform grooming
      }
    }
    //重构后
    publicclass Animal
    {
      
    publicvoid EatFood()
      {
        
    // eat some food
      }

      
    publicvoid Groom()
      {
        
    // perform grooming
      }
    }
    publicclass Dog : Animal
    {
    }

    6.提取子类:将基类中的方法放到子类中,这里的子类也许并不存在,需要自己新建立。

     用法场景:当基类中的某些方法并不是面向所有或者大多数类的时候,需要把这些方法下放到子类中。

    //重构前
    publicclass Registration
    {
      
    public NonRegistrationAction Action { get; set; }
      
    publicdecimal RegistrationTotal { get; set; }
      
    publicstring Notes { get; set; }
      
    publicstring Description { get; set; }
      
    public DateTime RegistrationDate { get; set; }
    }
    //重构后
    publicclass Registration
    {
      
    publicdecimal RegistrationTotal { get; set; }
      
    publicstring Description { get; set; }
      
    public DateTime RegistrationDate { get; set; }
    }

    publicclass NonRegistration : Registration
    {
      
    public NonRegistrationAction Action { get; set; }
      
    publicstring Notes { get; set; }
    }

    7.合并继承:把子类合并到基类中去。

     用法场景:当子类只有属性定义,并且这些属性可以放置在基类中,那这个子类就是多余的,在把属性和基类合并后就可以移除了。

    //重构前
    publicclass Website
    {
      
    publicstring Title { get; set; }
      
    publicstring Description { get; set; }
      
    public IEnumerable<Webpage> Pages { get; set; }
    }
    publicclass StudentWebsite : Website
    {
      
    publicbool IsActive { get; set; }
    }
    //重构后
    publicclass Website
    {
      
    publicstring Title { get; set; }
      
    publicstring Description { get; set; }
      
    public IEnumerable<Webpage> Pages { get; set; }
      
    publicbool IsActive { get; set; }
    }

      继承相关的重构就这几点,尝试在项目中多用用,很快就有感觉了:)

  • 相关阅读:
    神经网络(2)---neurons and the brain
    P2P system:How Chord tackles failures
    如何成为更好的自己
    P2P system: Chord
    P2P system: FastTrack and BitTorrent
    P2P system: GNUTELLA
    P2P system: Napster
    P2P system: Introduction
    幸福公开课(2)
    MTV与MVC 多对多表的创建方式 前后端传输数据编码格式 ajax 批量插入数据 自定义分页器
  • 原文地址:https://www.cnblogs.com/ywsoftware/p/2892648.html
Copyright © 2020-2023  润新知