iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

Tight coupling的說明

  • 緊耦合指的是兩個或多個類別(模組), 彼此高度的相互依賴
  • 緊耦合導致程式碼難以維護與修改, 因為修改一個類別會連續性影響另一個類別
  • 緊耦合使程式碼難以重用與測試

Loose coupling的說明

  • 鬆耦合是指類別與模組之間有最小的依賴性. 使用介面/抽象來彼此互動, 減少實際上的內部互動.
  • 鬆耦合使程式碼更能模組化、可重用,且容易修改而不影響其他系統
  • 鬆耦合對於測試與彈性非常重要

Tight coupling範例

假設有個員工類別, 要計算當年年終的薪水:

public class Employee
{
    public decimal CalculateYearEndSalary(decimal baseSalary, int seniority)
    {
        decimal bonus =
            BonusCalculator.CalculateBonus(baseSalary, seniority);
        return baseSalary + bonus;
    }
}
public class BonusCalculator
{
    public static decimal CalculateBonus(decimal baseSalary, int seniority)
    {
        if (seniority >= 5)
        {
            return baseSalary * 3;
        }
        else
        {
            return baseSalary * 1;
        }
    }
}

以上述程式碼, Employee與BonusCalculator是緊耦合. 因為Employee直接呼叫BonusCalculator的CalculateBonus函數來計算分紅.

回顧前面提到的缺點:

  • 低維護性:
    • 如果要改變分紅計算的邏輯, 必須修改BonusCalculator類別. 而這種異動會不注意地改變Employee類別或其他類別的後續行為.
  • 低重用性:
    • BonusCalculator類別不容易被其他系統重用, 因為目前已被Employee類別使用.
  • 低測試性:
    • 當要測試Employee類別, 要分離BonusCalculator類別是不容易的. 得強迫一起測試而使測試複雜.

Loose coupling

  • 為了使耦合降低, 我們將定義出IBonusCalculator介面, 以依賴注入的方式注入到Employee類別. 因此可提升維護性、測試性:
public interface IBonusCalculator
{
    decimal CalculateBonus(decimal baseSalary, int seniority);
}

public class Employee
{
    private readonly IBonusCalculator bonusCalculator;
    public Employee(IBonusCalculator bonusCalculator)
    {
        this.bonusCalculator = bonusCalculator;
    }

    public decimal CalculateYearEndSalary(decimal baseSalary, int seniority)
    {
        decimal bonus =
            bonusCalculator.CalculateBonus(baseSalary, seniority);
        return baseSalary + bonus;
    }
}

public class SeniorityBonusCalculator : IBonusCalculator
{
    public decimal CalculateBonus(decimal baseSalary, int seniority)
    {
        if (seniority >= 5)
        {
            return baseSalary * 3;
        }
        else
        {
            return baseSalary * 1;
        }
    }
}

上一篇
Cohesion 內聚
下一篇
Removing Shotgun Surgery 的重構
系列文
程式淨化計畫:痛苦是重構的起源!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言