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?

― フロントエンドからバックエンド、DBまでつながる流れとController/Service/Repositoryの役割分担

Webやアプリサービスで、ユーザーがリクエストを送り、その結果を受け取るプロセスは

実際のレストランでお客様が注文し、料理を受け取る流れと非常によく似ています。

今回は「フロントエンドからバックエンド、DB」までの全体的な流れと、

なぜController / Service / Repositoryの構造を分けるのかについて説明します。

1️⃣ お客様がレストランへ入店 → フロントエンド

お客様がレストランに入り、席に座ってメニューを見ます。

どの料理を注文するか決めて、オーダーの準備をします。

  • 開発でのたとえ:
    • お客様 = ユーザー
    • レストランホール・メニューボード(*ウェブサーバーからのデータ) = フロントエンド(UI/UX)
    • ユーザーがボタンをクリックしたりフォームを入力したりする行為=リクエスト(Request)の準備

フロントエンドはユーザーに画面(UI)を表示し、操作を可能にします。

2️⃣ 注文の伝達 → API / Controller

お客様がメニューを選んで「注文」ボタンを押すと、

スタッフ(API)が注文票をキッチンに渡します。

  • 開発でのたとえ:
    • スタッフ = API
    • 注文票の受け渡し = HTTPリクエスト(Request)

ここでControllerが登場します。

Controllerの役割は、「どのリクエストかを判別し、次の工程に渡す中継地点」です。

🍽 たとえ:

「スタッフがシェフに『テーブル3番、リゾット注文です!』と伝える瞬間」

なぜ分けるのか?

注文伝達だけ担当させることで、Controllerが単純な窓口(入口)だけを担い、

ロジックが混在しなくなるため保守性が向上し、流用や再利用もしやすくなります。

3️⃣ 料理の計画 → Service

シェフが注文内容を見て調理手順を決めます。

どの食材を使い、どうやって調理するかを判断します。

  • 開発でのたとえ:
    • Service = 実際のビジネスロジックを実行する層
    • Controllerからの指示を受けて、「何をどう処理するか」決定

なぜServiceを分けるのか?

Serviceがないと、Controllerにすべてのロジックが集中してしまい、

コードが複雑化し修正も難しくなります。

シェフの「調理計画」を独立して管理することで、

メンテナンス性や拡張性が格段に上がります。

4️⃣ 食材の準備 → Repository / DB

調理を始めるには、まず食材を取り出す必要があります。

シェフは冷蔵庫から材料を取り出します。

  • 開発でのたとえ:
    • 冷蔵庫 = データベース(DB)
    • Repository / DAO = 食材を取り出すアシスタントシェフ
    • データの参照、保存、更新などDB操作を担当

なぜRepositoryを分離するのか?

DBとのやり取りをServiceから分離することで、

DB構成が変わってもServiceやControllerを修正せずに済みます。

「関心の分離(Separation of Concerns)」によってコード管理が容易になります。

5️⃣ 料理の完成 → Service → Controller → API

食材が揃ったら、シェフはレシピ通りに料理を仕上げます。

完成した料理をスタッフ(API)へ渡します。

  • 開発でのたとえ:
    • Serviceでロジックを実行し結果を生成
    • Controllerがそれをラッピングし、API(Response)で返却
    • 動的に作られたデータ(注文履歴、オススメメニュー、決済結果など)がフロントエンドに渡されます

6️⃣ お客様への提供 → フロントエンド

スタッフ(API)が完成した料理をお客様に届け、

ユーザー(お客様)は注文品を受け取り食事を始めます。

  • 開発でのたとえ:
    • フロントエンドはAPIから受け取ったデータを画面に表示
    • ユーザーは結果を確認し、必要なら追加アクションも可能

7️⃣ 全体の流れ(レストランたとえまとめ)

段階 開発 レストラン 分離理由
1 Frontend お客様がメニューを見て注文準備 UI/UX提供、入力処理
2 Controller 注文票の伝達 入力受付・中継、保守性向上
3 Service 料理計画・調理実施 ビジネスロジック分離
4 Repository/DB 食材の準備 DB操作ロジック分離
5 Service→Controller→API 料理の完成→ラッピング→提供 結果生成・伝達の明確化
6 Frontend お客様へのサービング / 画面表示 結果を正しくユーザーに伝達

✅ ポイントまとめ

フロントエンド、Controller、Service、Repository、DB、それぞれの役割を明確に分けることで効率的な開発が実現します。

Controller / Service / Repository構造を採用することで、保守性・再利用性・拡張性を高めることができます。

🧭 次回予告

次回は、レストランが大盛況になり、お客様が行列を作って待っているけれど、

すべての注文を受けきれず、一部のお客様が諦めて帰ってしまう――

そんなときどう対応すればいいのか?をテーマに解説します!

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?