當一段程式碼處理多個關注點時,最好將它拆分成獨立的階段或模組。
這讓你能獨立處理某個階段,而不影響其他部分。

Split Phase
編譯器就運用了這個原則,透過不同步驟將高階原始碼轉換成可執行機器碼。
拆分階段也能清楚地顯示哪些資料和函式屬於每個階段。
何時該拆分階段?
- 多重職責:一個函式執行超過一項明確的任務
- 未來變更:你希望改變某一部分而不影響其餘部分
- 提升清晰度:每個階段清楚地展示其輸入、邏輯和輸出
範例#
重構前#
def process_order(data):
quantity = data["quantity"]
price = data["price"]
total = quantity * price
if data["type"] == "book":
tax_rate = 0.1
else:
tax_rate = 0.2
tax = total * tax_rate
return total + tax
if __name__ == "__main__":
order_data = {"type": "book", "quantity": 4, "price": 150}
total_cost = process_order(order_data)
print(f"Total cost: {total_cost}")重構後#
def calculate_base_total(quantity, price):
return quantity * price
def calculate_total_with_tax(base_total, item_type):
if item_type == "book":
tax_rate = 0.1
else:
tax_rate = 0.2
tax = base_total * tax_rate
return base_total + tax
if __name__ == "__main__":
order_data = {"type": "book", "quantity": 4, "price": 150}
base_total = calculate_base_total(order_data["quantity"], order_data["price"])
total_cost = calculate_total_with_tax(base_total, order_data["type"])
print(f"Total cost: {total_cost}")