0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ユースケース層は「ユーザー操作」だけを書く場所ではない

Posted at

はじめに

ユースケース層は「ユーザーが操作する処理だけを書く場所」だと考えている人は多い。
この考えは間違いではないが、本質ではない。

ユースケース層の役割はもっと広い。
それは「アプリケーションとして必要な処理の流れ」を書く場所である。
ユーザーの直接的な操作かどうかは関係ない。

この記事ではその理由を解説する。

よくある誤解

ユースケース層 = ユーザー操作をまとめる場所
このイメージはClean Architectureを学び始めたときによく陥る誤解である。

例えば次のような操作は、誰が見てもユースケースだとわかる。

  • アカウント登録
  • アカウント削除
  • ログイン

一方で次のような処理はどうだろうか。

  • アカウント一覧取得
  • アカウント詳細取得
  • 検索処理

これらは「ユーザーの操作」というよりは「表示のための処理」に見えるかもしれない。
だが結論から言えば、これらも全てユースケース層に置くべき処理である。

なぜ表示用の処理もユースケース層に書くのか

理由はシンプルである。

Clean Architectureでは、ユースケース層は「アプリケーションが提供する処理の流れ」を全て受け持つ。
UI層やインフラ層から独立した「アプリ固有のルール」をここに閉じ込める。

つまり次のように考えるべきである。

ユースケース層は「ユーザーの操作」ではなく「アプリの振る舞い」を書く場所である。

「表示のための処理」も「登録・更新・削除」も区別しない。
どちらもアプリケーションとしての処理手順であり、ユースケースである。

図で整理する

[ UI層 ]  
     ↓ ユーザー操作 or 表示要求  
[ ユースケース層 ]  
     ↓ アプリの処理手順  
[ ドメイン層 ]   

具体例

CreateAccountUseCase(登録処理)

Execute(ctx, input)  アカウントを作成して返す

FindAccountUseCase(表示処理)

Execute(ctx, id)  アカウントを取得して返す

これらはどちらもユースケース層に属する。
「アプリケーションの流れを表現する処理」だからである。

表示処理だからといってUI層やインフラ層に任せてしまうと、アプリケーションのルールが散逸し保守性が落ちる。

結論

ユースケース層は「ユーザーの操作」だけを書く場所ではない。
アプリケーションが提供するあらゆる処理の流れを書く場所である。

迷ったときはこう考えると良い。

その処理はアプリケーションとして必要か?
アプリが提供する一連の処理手順か?

これに「はい」と答えられるなら、ユースケース層に書く。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?