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


    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; }
    }

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

  • 相关阅读:
    .Net 4.0新特性之Dynamic 动态类型(转载)
    三种提高Google Analytics效率的方法(转载)
    PowerBuilder 12使.NET的应用开发更快捷
    .Net 之匿名类(AnonymousType)(转载)
    ASP.NET MVC学习笔记一(转载)
    js动态获取虚拟目录名称 相当于服务端ResolveUrl("")方法(转载)
    CSS 备忘(转载)
    ASP.NET4与VS2010开发Ajax Library特征(转载)
    POJ1988 Cube Stacking
    HDU3694 Fermat Point in Quadrangle
  • 原文地址:https://www.cnblogs.com/ywsoftware/p/2892648.html
Copyright © 2020-2023  润新知