7-14. クリーンアーキテクチャで設計するタスク管理ドメインアプリケーション

SOLID原則(第6章)に沿って関心を分離した、拡張性の高いタスク管理システムの実装例です。

Python

from abc import ABC, abstractmethod
from dataclasses import dataclass

# 1. Domain Layer (エンティティとリポジトリインターフェース)
@dataclass
class Task:
    id: int
    title: str
    completed: bool = False

class TaskRepository(ABC):
    @abstractmethod
    def save(self, task: Task) -> Task:
        pass

# 2. Use Case / Service Layer (ビジネスロジック)
class TaskService:
    def __init__(self, repo: TaskRepository):
        self._repo = repo

    def create_task(self, task_id: int, title: str) -> Task:
        if not title:
            raise ValueError("タスク名は必須です。")
        task = Task(id=task_id, title=title)
        return self._repo.save(task)

# 3. Infrastructure Layer (具象実装)
class InMemoryTaskRepository(TaskRepository):
    def __init__(self):
        self._storage = {}

    def save(self, task: Task) -> Task:
        self._storage[task.id] = task
        return task

# 実行テスト
if __name__ == "__main__":
    repo = InMemoryTaskRepository()
    service = TaskService(repo)
    new_task = service.create_task(1, "Python活用本を執筆する")
    print("作成されたタスク:", new_task)

コメント

タイトルとURLをコピーしました