質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20288questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MVC

    223questions

    MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

  • Framework

    122questions

    Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。

[PHP]MVCモデルにおいて、M・V・Cのどこから開発するか

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 1,898

pgm_bakabon

score 37

お世話になっております。

現在、PHP(Laravel 5.2)で、サービス開発を行っています。

皆様、MVCモデル(Laravel関係なく)を採用している場合、
1人で1機能を開発する場合は、どこから着手されますか?

私自身、

  1. モデル
  2. コントローラー
  3. ビュー
    の順番で着手をするのが実装しやすいです。

が、今のチームで、ビューから作成することになり、
非常にコーディングしにくいです。
ビューだけ作って一度コードレビューが発生します。

皆様のご意見をお伺いできればと思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+5

小さなシステムしか作ったことがない者の個人的な意見ですが、私がシステムを組む場合は、初期化や入力や集計処や出力などの各種の処理を縦軸に、ファイルや画面デザインや印刷デザインを横軸に並べたプロセスマトリックスチャートを作ってから開発します。そしてそれぞれのファイルや画面デザインなども大まかなデザインを描いておきます。開発しながらの多少の仕様変更もおこりますが、システムの全体像が見えていれば修正点と影響箇所が見渡しやすいので、臨機応変に対処できます。

ちなみに6年前にAccessで開発したe-ラーニングシステムのチャートが下図です。
イメージ説明 

フレームワークによるMVCモデルではないですが、システムの全体像を俯瞰する意義は共通すると思います。
一応、もう少し機能を単純化したIIS上で働くASPスクリプトでWebシステム向けのバージョンも開発しました。

その手順からすれば、モデルもビューも同様にある程度形になっていた方が、処理で扱いやすいと思います。
質問の内容によれば、モデルの正規化やグループ集計用のキー項目の工夫などの必要性が後で浮かび上がってきて、蒸し返しが多発する可能性があり、その点をご心配なのでしょう。
逆にビューを明確にするとシステムの目的が理解しやすくなるので、それを狙ってビューを最初に固める方針ではないかと思われます。ビューもモデルもその他のシステムのエンティティもある程度は形にしておくとよいでしょう。さらに、改善点に気付いたときにその修正箇所と影響範囲を見通せるように、モデルとビューとそれに対応するコントローラとの関連性をチャート化しておけば、ある程度はオーバーヘッドも想定して手当てできるのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

LaravelならWebアプリケーションですよね。

View先行の進め方なら、まずURLを決めて Controllerから着手します。
着手といっても中身はコメントとダミー変数だけにします。
コメントだけというのがコツです。

/user/show_profile/{id} としたURLならこんな感じでしょうか。

class UserController extends Controller {
    public function show_profile() {
        // 何を受け取るかをコメント
        //  GET,POST,Session,Cokkie,Env...
        // 例) 
        // GETパラメータのidを取得

        // 何のモデル、サービスを使うかをコメント
        // 例)
        // UserModelからidに一致するユーザ情報を取得

        // 何を返すか ダミーで作成します。
        $user = [
             'id' => 123,
             'name' => 'hoge',
        ];
        return response()->view('profile', $user);
    }
}

で、次にViewを作り以下を確認&レビュー。

  • UX,UI に問題ないか
  • 送信方法はGET,POST,Ajaxどれにすべきか
  • どのデータをどう取得するべきか
  • レスポンスはHTML,リダイレクト,json,xmlどれにすべきか

問題があれば先のコメントとダミー変数を修正。再度、確認&レビュー。

問題なく行けそうと判断できれば、コメントに沿ってModelやServiceを作りこみます。
その際は、全体をみて共通化できる処理がないか確認した方がいいでしょう。

この手法であれば、
・実際の画面を先に確認できる
・修正はコメントだけなので手直しを最小限にできる。
・コメントから処理内容をイメージできるので、他の人へ実装担当を渡すのも容易。
といったメリットがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

私もまだまだ勉強中ではありますが、職場で FuelPHP を使ってて、だいたい Controller から着手します!
Controller はユーザーからのリクエストを扱う層で、作成するコンテンツの核となるロジックを書くので、そこを先にレビューしてもらえば戻り作業が少なくて済むからです。
デバッグも容易ですし。

View から作成しても View(ブラウザ)からの入力を受け取るのは Controller で、Model のデータを呼び出す処理も Controller に書くので、 Controller からレビューしてもらう、が適切かなと思います。

まぁでも View からでも Model からでも同時並行でもいいとは思いますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

自分は普段Cakephpを使って、基本的には1機能を1人で開発していますが、あまりMVCのどこから作るという意識をしたことはないです。それよりは、その機能を実現する上で実装方法が不明確だったり、難易度が高そうなところから作っていきますね。または、その機能の中核をなす部分から実装します。それらを後回しにして、結局うまく行かなかった場合、手戻りが発生しそうだからです。
また、中核部分を最初に作るとデバックしやすいというのもあると思います。

例えば...
UIがメインの機能であれば、まずViewをしっかり作って、関係者にレビューしてもらうとか
課金などのビジネスロジックが重要な機能なら、Modelをしっかり作るとか

※なお、MVCどれか一つだけ作っても動かないので、どこからちゃんと作り込むかというレベルです

ある程度、中核が決まったら、細かいUI調整とか、バリデーションとか、ロギングとか肉付けしていくような感じでやってます。

今のチームで、ビューから作成することになり、 非常にコーディングしにくいです。 
ビューだけ作って一度コードレビューが発生します。

運用がうまくいかないのであれば見直した方がいいかもしれませんね。
作っているシステムや体制にもよるかもしれませんが、ビューだけ作ってレビューしてもらっても微妙な可能性はあるかもですね(自分のプロジェクトでそれはやらないです)。なぜそうしているのかが書かれていないのでなんとも言えませんが...

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20288questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MVC

    223questions

    MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

  • Framework

    122questions

    Frameworkは、アプリケーションソフトを開発する際に、一般的な機能をより簡単に、より早く完了させる事を目的とした、ソフトウェアやライブラリのセットを指します。開発にフレームワークを使用する事で、追加で必要となる機能だけを開発するだけで済む為、開発効率の向上が見込めます。