ユースケースの概要
2. ビジネスルールに関する妥当性チェックを行う
「ビジネスルールに関する妥当性チェック」はユースケースの責務
一般的に、変更したエンティティの状態は 永続化 する もし、永続化以外の副作用 を持つ処理が存在する場合、他の適切な送信ポートも呼び出す 4. 処理結果を返す
送信ポートから受け取った値を別のオブジェクトに変換する
hr.icon
上記を踏まえて、「送金する」ユースケースを実装する
radish-miyazaki.icon による Go のサンプルコード warning.icon SendMoneyService は 受信ポートである SendMonyServiceUseCase インタフェースを満たすものとする
code:buckpal/application/domain/service/send_money_service.go
type SendMoneyService struct {
loadAccountPort LoadAccountPort
updateAccountStatePort UpdateAccountStatePort
}
// ...
func (s *SendMoneyService) SendMoney(command SendMoneyCommand) bool {
// 詳細は次の章以降
}
SendMoney が呼び出されると、
1. 送信ポートとなる LoadAccountPort インタフェースを呼び出し、口座の状態を取得する
2. 取得した口座の状態を持ったエンティティを使って送金を行い、状態を変更する
3. 新しくなった口座の状態を DB に保存するため、 送信ポートとなる UpdateAccountStatePort を呼び出す
idea.icon LoadAccountPort と UpdateAccountStatePort を一緒に使う頻度が高ければ、より大きな 1 つのインタフェースにするのも手
code:go
type AccountRepositoryPort {
LoadAccountPort
UpdateAccountStatePort
}
コンポーネント間の関係を図式化する
https://scrapbox.io/files/66c0bc2066e9c4001cff2949.png