2018年9月29日 星期六

『SOLID 之會員管理重構挑戰練習』

『SOLID 之會員管理重構挑戰練習』

我們要設計一個會員管理服務 MemberManager,其可以接受會員 Member 進行註冊功能,如底下程式碼。
public enum MemberType { Personal, Education, Organization }
public class Member
{
    public MemberType MemberType { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string Phone { get; set; }
    public string LineID { get; set; }
    public bool Binding { get; set; }
}
public class MemberManager
{
    public void Register(Member member)
    {
        if (string.IsNullOrEmpty(member.Name))
        {
            throw new ArgumentException("姓名不可為空白", nameof(member.Name));
        }
        if (string.IsNullOrEmpty(member.Phone))
        {
            throw new ArgumentException("電話不可為空白", nameof(member.Phone));
        }
        if (string.IsNullOrEmpty(member.Email))
        {
            throw new ArgumentException("Email不可為空白", nameof(member.Email));
        }
        if (string.IsNullOrEmpty(member.LineID))
        {
            throw new ArgumentException("LineID不可為空白", nameof(member.LineID));
        }
        Console.WriteLine($"發送簡訊驗證通知給 {member.Phone}");
        if (member.Binding == false)
        {
            Console.WriteLine("進行 Line ID 資料綁定");
        }
        Console.WriteLine("儲存會員資料");
    }
 
}
底下為使用這個類別的用法
Console.WriteLine("原始程式碼");
OriginalSituation.MemberManager member = new OriginalSituation.MemberManager();
member.Register(new OriginalSituation.Member()
{
    MemberType = OriginalSituation.MemberType.Personal,
    Name = "Vulcan",
    Email = "vulcan@doggy.com.tw",
    Phone = "0987654321",
    Binding = true,
    LineID = "vulcan",
});
 
Console.WriteLine($"Press any key for continuing...{Environment.NewLine}");
Console.ReadKey();

變更需求說明

由於現在這個 會員管理服務 MemberManager 在進行會員註冊過程中,將會透過手機簡訊發會給會員一個驗證通知訊息,不過,客戶覺得這樣並不足夠,希望能夠加入發送電子郵件的驗證訊息到會員的信箱中。

練習目的說明

當您面對這樣的變更需求的時候,請依據 SOLID 個原則,重構這個類別,使他可以符合 SOLID 原則(也許,並不是每個原則都可以套用進去),並且重構後程式碼可以滿足客戶的變更需求。

練習提示

  • 在進行重構實作之前,請大家先提出您的意見,這個 MemberManager 類別,違反了那些 SOLID 原則,並且,請說明,您會準備如何進行重構這件事情或者預計執行想法?
    各位可以參考 如何進行您的專案程式的 SOLID Principle 原則之評估方法 文章中的說明,套用 分析理由 的制式描述方式,闡明您對於重構前、後,對於 SOLID 驗證的論述
    若該程式碼沒有符合 SOLID 其中一個原則,也請您說明您的理由與看法
  • 之後,在嘗試逐步修正與重構這個類別,您可以將套用個原則的結果,將原始碼提出來與大家一起分享,並且各位學員一同來檢視這個重構後的程式碼,是否有符合 SOLID 個原則,如果沒有,那麼,在重構後的程式碼中,您覺得是那些地方沒有修正好,而這些地方一樣違反了 SOLID 的哪個原則,並且提出您的解釋理由。
這個練習並沒有一定標準的作法(標準答案),您需要參考 SOLID 的個原則說明,進行重構。經過這樣的練習,相信您已經開始進入到 SOLID 精通領域中了。*



沒有留言:

張貼留言