doc.dev1x.org

Value Object

1. 目的

プリミティブ型に型を付けて何を表しているのか明確にしたい

2. 課題

プリミティブ型はドメイン知識を表現していない

3. 対策

プリミティブ型の値をラップするオブジェクトを定義する

class Age:
    def __init__(self, age):
        sef._age = age

    def value(self):
        return sef._age

    def is_over_18(self):
        return sef._age >= 18

4. メリット

値が何を表しているのかが明確になる

値の範囲を明確にできる

class Age:
    def __init__(self, age):
        if age < 0:
            raise ValueError('年齢の範囲が異常')

        if age >= 130:
            raise ValueError('年齢の範囲が異常')

        sef._age = age

    def value(self):
        return sef._age

    def is_over_18(self):
        return sef._age >= 18

5. デメリット

コード量が増える

6. 注意

参考資料