10-6
Manager / Processor に逃げない
Manager、Processor、Controller は「何をするクラスか」を何も語らない万能の名前。「とりあえず Manager に置こう」が積み重なると、無関係な処理が際限なく集まって巨大クラス化する。目的の数だけクラスを分け、それぞれに目的の名前を付ける。
何でも吸い込む AccountingManager
✕ Bad
class AccountingManager:
def post_journal_entry(self, entry: JournalEntry) -> None: ...
def calculate_consumption_tax(self, period: Period) -> int: ...
def export_trial_balance_csv(self, period: Period) -> Path: ...
def send_payment_reminder(self, client_id: str) -> None: ...
def backup_database(self) -> None: ...✓ Good
class GeneralLedger:
"""総勘定元帳。仕訳の転記だけを扱う"""
def post(self, entry: JournalEntry) -> None: ...
class ConsumptionTaxReturn:
"""消費税申告。税額計算だけを扱う"""
def __init__(self, period: Period) -> None: ...
def tax_due(self) -> int: ...
class TrialBalanceCsvExporter:
"""試算表のCSV出力だけを扱う"""
def export(self, period: Period) -> Path: ...Manager に新メソッドを足したくなったら「この処理の本当の目的は何か」を一度言葉にしてみる。その言葉がそのまま新しいクラス名になる。