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)

コメント