ビジネスロジック層は、アプリケーションの中心的な部分であり、データの処理やルールの適用を行います。この層は、プレゼンテーション層(ユーザーインターフェース)やデータアクセス層(データベースとのやり取り)から独立しており、アプリケーションのビジネスルールを実装する役割を担っています。
ビジネスロジック層の主な役割は以下の通りです。
ビジネスロジック層を設計する際には、以下のポイントを考慮します。
以下は、簡単なビジネスロジック層の例です。この例では、ユーザーの登録処理を行うビジネスロジック層を実装します。
まず、ユーザーの情報を表現するクラスを定義します。
class User:
def __init__(self, username: str, email: str):
self.username = username
self.email = email
次に、ユーザー登録を行うビジネスロジックを持つクラスを作成します。このクラスでは、ユーザーの検証や重複チェックを行います。
class UserService:
def __init__(self, user_repository):
self.user_repository = user_repository
def register_user(self, username: str, email: str):
# ユーザー名とメールアドレスの検証
if not self._is_valid_username(username):
raise ValueError("無効なユーザー名です")
if not self._is_valid_email(email):
raise ValueError("無効なメールアドレスです")
# 重複ユーザーのチェック
if self.user_repository.exists(username):
raise ValueError("このユーザー名は既に使用されています")
# ユーザーの登録
user = User(username, email)
self.user_repository.save(user)
def _is_valid_username(self, username: str) -> bool:
return username.isalnum() and len(username) >= 3
def _is_valid_email(self, email: str) -> bool:
return "@" in email
ユーザーサービスクラスが依存するユーザーリポジトリのインターフェースを定義します。これにより、データアクセス層とビジネスロジック層の間の疎結合が実現できます。
class UserRepository:
def exists(self, username: str) -> bool:
raise NotImplementedError
def save(self, user: User):
raise NotImplementedError
次に、ユーザーをメモリ内に保存する簡易的なリポジトリを実装します。
class InMemoryUserRepository(UserRepository):
def __init__(self):
self.users = {}
def exists(self, username: str) -> bool:
return username in self.users
def save(self, user: User):
self.users[user.username] = user
最後に、ビジネスロジック層を利用してユーザーを登録する例を示します。
if __name__ == "__main__":
user_repository = InMemoryUserRepository()
user_service = UserService(user_repository)
try:
user_service.register_user("testuser", "test@example.com")
print("ユーザーが正常に登録されました。")
except ValueError as e:
print(f"エラー: {e}")
ビジネスロジック層は、アプリケーションの重要な部分であり、データ処理やビジネスルールの適用を担当します。ここでは、ユーザー登録を例にビジネスロジック層の構築方法を学びました。依存性の管理やクラス設計に注意を払い、疎結合な設計を目指すことが重要です。これを踏まえて、次のステップへ進んでください。