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

【概念理解】プレゼンターとは何か?

クリーンアーキテクチャを学ぶ際に、最初に戸惑う概念の一つが「プレゼンター(Presenter)」である。
この記事では、プレゼンターの役割や必要性について、常体でわかりやすく説明する。

🔷 プレゼンターとは何者か?

プレゼンターとは、ユースケース(UseCase)の実行結果をユーザーや外部向けに整形して渡す責任を持つ層である。
つまり、ビジネスロジックの結果を「見せる形」に変換する担当だ。

🎯 プレゼンターがいない場合

ユースケースが domain.Node のような構造体をそのまま返してしまうと、次のような問題が発生する:

✅ プレゼンターの利点

プレゼンターを導入することで、以下のような利点が得られる:

項目 内容
分離 ロジックと表示の責務を明確に分けられる
柔軟性 出力形式(JSON、HTMLなど)を柔軟に変更できる
テスト性 出力部分だけに注目したテストが可能になる
再利用性 同じユースケースを、複数の出力方法で再利用できる

🧱 実装イメージ

プレゼンターのインターフェース(usecase 層)

type CreateNodePresenter interface {
	Output(domain.Node) CreateNodeOutput
}

プレゼンターの実装(adapter 層など)

type jsonCreateNodePresenter struct{}

func (p jsonCreateNodePresenter) Output(n domain.Node) CreateNodeOutput {
	return CreateNodeOutput{
		ID:       string(n.ID()),
		Question: n.Question(),
		Answer:   n.Answer(),
		URLs:     n.URLs(),
		Next:     toStringList(n.Next()),
	}
}

ユースケースでの利用

createdNode, err := repo.Create(ctx, node)
return presenter.Output(createdNode), nil

🌐 アーキテクチャ内での立ち位置

[Controller] → [UseCase] → [Presenter] → [View or API]
                         ↑
                    ドメインモデル
  • UseCase:ビジネスロジックを実行する層
  • Presenter:結果を整えて外部に渡す層
  • View / API:ユーザーが見る最終出力

🧭 まとめ

項目 内容
プレゼンターの役割 ユースケースの出力を「見せる形式」に整える
メリット 表示の柔軟性、責務の分離、テスト性の向上など
実装のポイント ユースケースの出力をラップするだけの軽い責務に留める

💬 補足

「ユースケースは“何をしたか”を返す。プレゼンターは“どう見せるか”を考える」
この考え方を頭に入れておくと、責務の切り分けがうまくいく。

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?