提取子類

概念:本文中的”提取子類”是指把基類中的一些不是所有子類都需要訪問的方法調整到子類中。

正文:當你的基類中存在一些方法不是所有的子類都需要訪問,你想將它們調整到子類中時,這個重構會變得很有用了。如下代碼所示,我們需要一個 Registration類用來處理學生選課的信息。但是當Registration類開始工作後,我們意識到我們會在兩種不同的上下文中使用Registration類,NonRegistrationAction和Notes只有在我們處理未註冊情況下才用到。

所以我們將NonRegistration和Notes提到單獨的NonRegistration類中。

using System;

namespace LosTechies.DaysOfRefactoring.SampleCode.ExtractSubclass.Before
{
    public class Registration
    {
        public NonRegistrationAction Action { get; set; }
        public decimal RegistrationTotal { get; set; }
        public string Notes { get; set; }
        public string Description { get; set; }
        public DateTime RegistrationDate { get; set; }
    }
}

重構後的代碼如下所示,這樣也滿足面向對象五大原則之一的單一職責。同時也讓類的結構變得更加清晰,增強了可維護性。

using System;

namespace LosTechies.DaysOfRefactoring.SampleCode.ExtractSubclass.After
{
    public class Registration
    {
        public decimal RegistrationTotal { get; set; }
        public string Description { get; set; }
        public DateTime RegistrationDate { get; set; }
    }

    public class NonRegistration : Registration
    {
        public NonRegistrationAction Action { get; set; }
        public string Notes { get; set; }
    }
}

總結:這個重構方法經常用來規範類的職責,和之前的一些重構方法也有些類似。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章