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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MVC

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

2回答

2428閲覧

MVCフレームワークでその他のクラスはどこに入るのか?

msx2

総合スコア174

MVC

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

2クリップ

投稿2016/09/08 01:54

PHPでフレームワークを使って開発しています。

ウェブなどで「ECサイトのショッピングカート」の作り方の解説を見ていると、

  • ショッピングカード→Cartクラス
  • 商品→Itemクラス

↑のようになっているものがありました。
これをMVCフレームワークで実装する場合はこれらのクラスもMVCのどれかに所属するのでしょうか?

CartクラスやItemクラスはプログラムのパーツになっているので特定の機能に属するとは考えにくいです。共通する処理はサービスとしてまとめると見通しが良くなると習いましたので最近はMVC+Serviceという形にしていますが、パーツも更に追加してMVC+S+Partsみたいな形になるのでしょうか?

自由にファイルは追加していけるので、どういう構造になろうとフレームワークを使う側の勝手ではありますが、フレームワーク元々のMVCという形から離れてしまって問題は起こらないのでしょうか?

質問させていただきたいのは下記2点です

  1. MVCフレームワークに独自の構造(今回の例ではサービスとパーツ)を追加していってフレームワークの動作に何か影響はないのか?
  2. MVCにおいて今回の例のCartクラスやItemクラスはどこに位置付けられるものなのか?

よろしくお願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2016/09/08 03:07

MVCのMを何だと認識してますか?
msx2

2016/09/08 04:11

MはModelでビジネスロジックが入るところだと思います。 何となくデータのやり取りをするクラスというイメージですが、もしかしてショッピングカートクラスもModelに入れてしまうといいのでしょうか?
guest

回答2

0

フレームワーク元々のMVCという形から離れてしまって問題は起こらないのでしょうか?

そもそも、なぜMVCなのでしょうか。何がしたくてMVCにするのでしょうか。

まず、MVCにすると、分業ができます。M側にPHPやSQLなど、V側にHTMLやJSと、
今では当たり前の分業制も、Webアプリ以前のPCアプリはそうではありませんでした。

では、ひとりで書き分業しないなら不要かといえば、保守性もあります。
UI部分は変更されやすいので、そこを分離してあると保守しやすいです。

だから、MVCを崩すと、分業容易性、保守性などが低下する問題があります。


MVCにおいて今回の例のCartクラスやItemクラスはどこに位置付けられるものなのか?

結論から言うとMです。

そもそもM=モデルの中心は、ドメインモデルです。ではドメインとは何でしょうか。
ショッピングサイトなら、ショッピングです。販売に関する機能です。

「カート」や「商品」は販売の仕組みですから、ドメインモデルであり、Mです。
もちろん、それを表示したり操作する部分はVとCになります。

これはたとえば、自動販売機の中のジュースとその容器がMで、
見本の缶とボタンなど、外側をVCと思えば理解しやすいでしょう。


PHPを使うユーザの多くは実用第一なので、PHPの書籍でも原理論を端折りがちで、
「なぜそうするのか」が分かりにくいですが、だからこそ意識的に探す必要があります。

投稿2016/09/08 08:02

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/09/08 09:06

ご回答ありがとうございます。 Model=データベース(テーブル)という固定概念がありましたがそうではないのですね。「MVC」と「ドメインモデル」で検索するといろいろと情報が出てきました、勉強になります。
guest

0

ベストアンサー

UIに直接関係ないものは全部Mです。
MVCはUI周りのアーキテクチャであって、
UIじゃない部分:Mをどう作るかは関心事ではないです。

雑な例で行くと
UIはMVCでレイヤー分けして、
モデルはドメイン層とユースケース層に分けようみたいな感じです。

投稿2016/09/08 04:19

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/09/08 05:02

ご回答ありがとうございます! UIに直接関係ないものは全部Mでいいんですね。納得です。 >モデルはドメイン層とユースケース層に分けようみたいな感じです。 最後のこの1行は私の知識では見えてこないのですが、何でもかんでもModelに詰め込んでしまうと1つ1つのModelが大きくなってしまうので、Mの中で適切な分け方がありそのキーワードが「ドメイン」と「ユースケース」だと理解しています。 新しいキーワードを教えてもらったので自分でも調べてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問