Python中級

中級 Pythonで学ぶドメイン駆動設計|練習問題編

導入

ドメイン駆動設計(DDD)は、ソフトウェア開発においてビジネスの複雑さを管理するための強力な手法です。特に中級エンジニアにとって、実務に即したドメインモデルの設計と実装は、プロジェクトの成功に直結します。本記事では、具体的なシチュエーションを通じて、ドメイン駆動設計の実践的なアプローチを探ります。

教科書レベルの解説(ドメイン駆動設計)

重要な概念の整理

ドメイン駆動設計では、ビジネスの要件を反映したモデルを構築することが求められます。特に「ユビキタス言語」を用いて、開発者とビジネス関係者が共通の理解を持つことが重要です。また、ドメインモデルを中心に据えることで、複雑なビジネスロジックをシンプルに表現できます。これにより、変更に強いアーキテクチャを実現できます。

コード例(Python)


class Product:
    def __init__(self, name, price):
        self.name = name
        self.price = price

class Cart:
    def __init__(self):
        self.items = []

    def add_product(self, product):
        self.items.append(product)

    def total_price(self):
        return sum(item.price for item in self.items)

# 使用例
if __name__ == "__main__":
    cart = Cart()
    cart.add_product(Product("Apple", 100))
    cart.add_product(Product("Banana", 150))
    print("Total Price:", cart.total_price())

コードの行ごとの解説

  1. class Product: 商品を表すクラスを定義します。
  2. def __init__(self, name, price): 商品の名前と価格を初期化します。
  3. class Cart: カートを表すクラスを定義します。
  4. def add_product(self, product): カートに商品を追加するメソッドです。
  5. def total_price(self): カート内の商品の合計価格を計算するメソッドです。
  6. if __name__ == “__main__”: スクリプトが直接実行された時の処理を定義します。

練習問題編

以下の練習問題に取り組んでみましょう。各問題に対する模範解答と解説も用意しています。

  1. 問題1: カートに商品を削除するメソッドを追加してください。
  2. 
    def remove_product(self, product):
        self.items.remove(product)
    

    解説: 削除メソッドでは、カート内の指定された商品をリストから削除します。

  3. 問題2: 商品の数量を管理する機能を追加してください。
  4. 
    class Product:
        def __init__(self, name, price, quantity=1):
            self.name = name
            self.price = price
            self.quantity = quantity
    

    解説: 商品クラスに数量の属性を追加し、カートの合計価格計算時に数量を考慮します。

  5. 問題3: カートの中身を表示するメソッドを実装してください。
  6. 
    def display_cart(self):
        for item in self.items:
            print(f"{item.name}: {item.price} x {item.quantity}")
    

    解説: カート内の各商品を表示するメソッドです。

まとめ

  • ドメイン駆動設計はビジネスの要件を反映したモデルを構築する手法です。
  • ユビキタス言語を用いて、開発者とビジネス関係者の共通理解を促進します。
  • 具体的なシチュエーションに基づいた実装が、実務での課題解決に役立ちます。