Open1
ドメイン駆動設計入門メモ
第4章 ドメインサービス
サービスとは何か
一般的な意味だと以下
誰かのために何かを行うこと、他者の助けになること。無形の財や価値あるいは労役などを提供すること。奉仕。用役。尽力。提供。
ソフトウェア開発の文脈で語られるサービスはクライアントのために何かを行うオブジェクトを示す。
ドメイン駆動におけるサービスとは
2つに文脈が分かられる。
- ドメインサービス: ドメインで扱う振る舞いで不自然になるものを扱う
- アプリケーションサービス: アプリケーション側の振る舞いを扱う
不自然さがあるドメインオブジェクト
以下はUserオブジェクト同士を比較して重複確認をしている。呼び出し側で不自然さが出ている
class User():
def __init__(self, id: int, name: str, email: str) -> None:
if id == 0:
raise ValueError("id cannot be None.")
if name == '':
raise ValueError("Name cannot be None.")
if email == '':
raise ValueError("Email cannot be None.")
self.id = id
self.name = name
self.email = email
def Exists(self, checkUser: 'User') -> bool:
if self.email == checkUser.email:
return True
return False
user1 = User(1, 'taro', 'email@example.com')
user2 = User(2, 'jiro', 'email@example.net')
# Emailの重複チェックをするのに、生成したUserオブジェクトを比較元と比較先を決めて指定している。結果はどちらの結果をもとに重複しているとするのかを見ただけで理解できるものになっていない
if user1.Exists(user2):
raise ValueError('duplicate Object')