當一組參數常一起穿梭於各函式間時,最好將它們打包成一個專屬物件。
這不僅能揭示它們的關係、縮短函式簽章,還為更深入、更易維護的改變鋪路。

Introduce Parameter Object

透過將相關資料組織成單一結構並相應地更新呼叫方式,你提升了設計的抽象層次,並簡化了對領域的理解。

一切從引入參數物件(Parameter Object)開始。

何時該引入參數物件?

  • 參數成群:多個參數被一起傳遞給多個函式
  • 資料封裝:將相關欄位封裝成單一、連貫的結構
  • 簡化簽章:縮短冗長的參數列表以提升清晰度
  • 為未來做準備:便於日後擴展或驗證

對於瑣碎或一次性的呼叫,參數物件可能會增加不必要的複雜度。

範例#

重構前#

def process_data(name, age, email):
    print(f"Name: {name}, Age: {age}, Email: {email}")


if __name__ == "__main__":
    process_data("Alice", 30, "alice@example.com")

重構後#

class PersonData:
    def __init__(self, name, age, email):
        self.name = name
        self.age = age
        self.email = email


def process_data(person: PersonData):
    print(f"Name: {person.name}, Age: {person.age}, Email: {person.email}")


if __name__ == "__main__":
    alice = PersonData("Alice", 30, "alice@example.com")
    process_data(alice)