名前設計
10-7

動詞まじりのクラス名を分解する

add_entry_to_journal のような「動詞+目的語」の長い名前が必要になるのは、よそのクラスの関心事を抱え込んでいるサイン。目的語を名詞のままクラスに昇格させ、メソッドは動詞1語で済むように設計し直す。

担当者クラスが仕訳帳の都合を抱え込む

Bad

締め済み期間のチェックという仕訳帳のルールを、担当者クラスが「動詞+目的語」のメソッドで肩代わりしている

名前に目的語が必要になる構造
class Accountant:
    def add_entry_to_journal(
        self, journal: list[JournalEntry], entry: JournalEntry
    ) -> bool:
        # 仕訳帳の締めルールを担当者が知ってしまっている
        if entry.date <= self.closed_until:
            return False
        journal.append(entry)
        return True
Good

目的語だった「仕訳帳」をクラスにすれば、メソッドは add の1語で意図が通じる

目的語をクラスに昇格
@dataclass(frozen=True)
class Journal:
    closed_until: date
    entries: tuple[JournalEntry, ...] = ()

    def add(self, entry: JournalEntry) -> "Journal":
        if entry.date <= self.closed_until:
            raise ClosedPeriodError(entry.date)
        return Journal(self.closed_until, (*self.entries, entry))

Journal.add(entry) は「仕訳帳に追加する」と英文のまま読める。動詞1語で書けないメソッドが増えてきたら、クラスの切り方そのものを見直す合図。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第10章。コード例は原則を自分の題材で表現し直したオリジナル。
10-7

動詞まじりのクラス名を分解する

add_entry_to_journal のような「動詞+目的語」の長い名前が必要になるのは、よそのクラスの関心事を抱え込んでいるサイン。目的語を名詞のままクラスに昇格させ、メソッドは動詞1語で済むように設計し直す。

担当者クラスが仕訳帳の都合を抱え込む

Bad

締め済み期間のチェックという仕訳帳のルールを、担当者クラスが「動詞+目的語」のメソッドで肩代わりしている

名前に目的語が必要になる構造
class Accountant:
    def add_entry_to_journal(
        self, journal: list[JournalEntry], entry: JournalEntry
    ) -> bool:
        # 仕訳帳の締めルールを担当者が知ってしまっている
        if entry.date <= self.closed_until:
            return False
        journal.append(entry)
        return True
Good

目的語だった「仕訳帳」をクラスにすれば、メソッドは add の1語で意図が通じる

目的語をクラスに昇格
@dataclass(frozen=True)
class Journal:
    closed_until: date
    entries: tuple[JournalEntry, ...] = ()

    def add(self, entry: JournalEntry) -> "Journal":
        if entry.date <= self.closed_until:
            raise ClosedPeriodError(entry.date)
        return Journal(self.closed_until, (*self.entries, entry))

Journal.add(entry) は「仕訳帳に追加する」と英文のまま読める。動詞1語で書けないメソッドが増えてきたら、クラスの切り方そのものを見直す合図。

参考: 『良いコード/悪いコードで学ぶ設計入門』(ミノ駆動 著、技術評論社)第10章。コード例は原則を自分の題材で表現し直したオリジナル。