
PHP4環境で、フレームワーク(以下FW)の勉強をしつつ、Mojavi2の導入を検討中です。
そこで思ったのですが、FWベースで開発したWebアプリは、基本的にエントリポイント(以下EP)は1つだけ(Mojaviでは、フロントコントローラであるindex.php)で構成されるのが基本(メリットが大きい)なのでしょうか? また、複数のEPで構成することは一般的に可能でしょうか?
例えば、ID登録制BBSアプリを作る場合、ログイン・ID登録・BBS投稿・BBS表示・プロフ登録・プロフ表示…等の「機能」があると思います。
これをFWベースで開発する場合、各機能をModuleとし、機能内でのページ遷移をActionとして構成する、という考え方(ID登録Module:登録情報入力Action→登録情報チェックAction→DB登録Action)で良いでしょうか?
複数のEPを作るメリットは?と言われると分からないのですが、FW導入以前は各機能ごとにEPとなるphpを作成するパターンに慣れてしまっていたもので…。例えば機能毎にフォルダ分けが出来るのが、複数EPのメリットとも考えられます。
ex1. FWなし(ディレクトリ構成によりEPを整理できる)
/usr/login.php
/usr/register.php
/bbs/read.php
/bbs/post.php
/prof/register.php
/prof/read.php
ex2. 1EPのFW
/index.php?Module=Login
/index.php?Module=RegisterID
/index.php?Module=ReadBBS
/index.php?Module=PostBBS
/index.php?Module=RegisterProfile
/index.php?Module=ReadProfile
ex3. 複数EPのFW(が可能かどうか分からないので、妄想)
/usr/index.php?Module=Login
/usr/index.php?Module=Register
/bbs/index.php?Module=Read
/bbs/index.php?Module=Post
/prof/index.php?Module=Register
/prof/index.php?Module=Read
昨日今日にFWを勉強し始めたので理解が浅いのですが、上記の考え方の正解と不正解を教えて下さい。
No.2ベストアンサー
- 回答日時:
No1です。
私もPHP4を使ってたんですよ。確かにJAVAのほうが大規模開発には向いてます。
ただし、PHPのもつ利便性も大きなもので、
たとえば、mixiを作る程度なら、PHPで十分です。あれにはJAVAは使いません。現にXOOPSなどはPHPですから。
ex1に関してですが、PHPにはincludeがあるから、実はすべてのファイルの冒頭で同じものを呼び出させることで、
ex1でもフロントコントローラにできます。
要は、コントローラとして働くロジック(Requestに対してどのActionを呼ぶか)が、集中型であるかどうかです。
ページコントローラは、ページ(=機能)に関するイベントは、ページ内で処理します。
機能単位で小さなMVCの構造を持ち、共通するロジックやテンプレートメソッドを持つ、
ベースクラス(ルートページクラス)が存在することが多いです。
ですから、ex1,ex2,ex3どちらでも、どのつくりにもできることにはできます。
これらのFrameworkを勉強するに当たっては、
「デザインパターン」というものが最初のステップになります。
これは、設計ではなくコーディングの仕方になります。
これらのほとんどがJAVAで解説されてますが、PHP5でも同様のことはできます。
amazon.co.jpで「デザインパターン」を調べてみてください。
次のステップは、エンタープライズ開発の設計パターンの学習です。
書籍はコーディング系に比べてちょっと少ないのですが、
私は .NETだったので、以下の書籍を参考にしていました。
・「Microsoft.NETによるエンタープライズソリューションパターン」(ASIN: 4891004517)
・「.NETのアプリケーションアーキテクチャ―アプリケーションとサービスの設計 」(ASIN: 4891004509 )
また、JAVAなら、SUNの「J2EE Blueprints」(書籍は不明なので以下のURL)
http://sdc.sun.co.jp/java/j2ee/blueprints/index. …
は必読です。
フレームワークの次は、ソフトウェアファクトリーということになると
思いますが、その場合は、
「ソフトウェアファクトリー―パターン、モデル、フレームワーク、ツールによるアプリケーションの組み立て」(ASIN: 489100472X)
あたりが参考になると思います。
なお、高速でスキルアップをしていきたいなら、.NETで学習して、JAVAに移る手があります。
.NET はMSDNという高度に体系化された質の高い膨大な技術情報があるので、非常に便利です。
また、.NET周りはツールの質が高く、初級から中級に上がるまでの速度は、ほかの比ではありません。
JAVAはPHP同様オープンソースで利用率が高く、避けては通れません。いずれは使用することになります。
(後半になってくると、言語を学習するかどうかは問題ではありません。)
小さなことですが、補足です。
デコレータとオブザーバについてですが、
「フロントコントローラに加えて、受信フィルタ(デコレータ)の追加導入」
という言い方のほうが正しいかと思います。オブザーバも同じです。
No.3
- 回答日時:
がると申します。
技術屋をやっている & フレームワークを自作でもっております(そろそろ公開予定)。> FWベースで開発したWebアプリは、基本的にエントリポイント(以下EP)は1つだけ(Mojaviでは、フロントコントローラであるindex.php)で構成されるのが基本(メリットが大きい)なのでしょうか?
そうですねぇ…状況にもよるのですが。PHPの場合、requireも含めてすべて動的に出来るので「分散する必要性が薄い」ので、結果的に集約されているケースは多いかと思われます。
> また、複数のEPで構成することは一般的に可能でしょうか?
理論上は可能なはずですし、うちのフレームワークだと普通に可能です。
> これをFWベースで開発する場合、各機能をModuleとし、機能内でのページ遷移をActionとして構成する、という考え方(ID登録Module:登録情報入力Action→登録情報チェックAction→DB登録Action)で良いでしょうか?
それも可能かと思います。
で…一つ入れ知恵を。
うちのフレームワーク…に限らずに出来ると思うのですが。多分。
もし「Modelの再帰的呼び出し」若しくは「ステータスによる管理」が行われている場合。
「コントローラ的Model」から「各機能Model」を呼び出す、といった多重構造もまた一つの手段だと思います。
> 複数のEPを作るメリットは?と言われると分からないのですが、FW導入以前は各機能ごとにEPとなるphpを作成するパターンに慣れてしまっていたもので…。例えば機能毎にフォルダ分けが出来るのが、複数EPのメリットとも考えられます。
えと…「機能毎にフォルダ分けが出来」ないんでしたっけ? 既存のFW。うちのが普通にそういったことが可能なので…あんまり意識したことがないです(苦笑
んで…Modelをうまく継承して作ると、エントリポイントを複数にしてなお「サイトすべてに共通の処理」が書けるので、そのあたりのメリットデメリットはあまり存在しないかと。
あと大規模サイトについてなのですが。
個人的には…PHPは「言語的に質が悪い」ので色々気にはなりますが(苦笑
現実問題として「PHPで開発をしたいクライアント」も多々いる現状、そうも言ってられないってのが実状です。
ですので「PHPで最大限のパフォーマンス」という方向性は、これは現状やむなしかなぁ、と思っております。
以上雑感込みで恐縮ですが。
No.1
- 回答日時:
.NET で2年くらいFW作成しています。
エントリポイントが一つであるメリットは、アクセスパスが一つになるということです。
要求をアクションにマッピングする設定ファイルを解して、
動作を定義できる、というメリットがありますが、
構築がややこしく、小さな変更に対しては開発コストがかかる
デメリットがあります。
これは、MVCでいうコントローラが「フロントコントローラ」
と呼ばれるパターンになります。(JAVA形式)
BBS程度ならページコントローラ(複数のEPでよい)
のほうがやりやすいとは思います。
小さい規模でフロントコントローラを導入すると、
非常に仰々しい開発になります。
一応、参考までに。。。
サイトの規模により、設計パターンは、その規模に応じて
一般的に以下のように進化します。
・MVC化
・ページコントローラパターン
・フロントコントローラパターン
・受信フィルタの導入(デコレータ)
・オブザーバパターン
どの規模がどのパターンなのかは、それこそ、これから
pe_daichan様が体感しながら調整していくことです。
(一人と複数人でも選択境界が違う)
また、上のリストは、必ずある問題に直面したときに、
下のリストに移っていくと思います。
(たとえば、ページコントローラで、ページコントローラ間の継承が複雑になり、
多数のページにまたがる頃合が、フロントコントローラを考慮する時期、とか)
せっかくですから、この設計に悩んだ機会に、これを意識してみては
どうでしょうか?
ただ「作れる」という人は沢山いますが、
このパターンを知って学習するのとそうでないのは違います。
説明すれば本が1冊できるくらいの事なので、
大雑把なことしかいえませんが、なんだかpe_daichanさんが
非常にいいポイントにいる気がしたので、
ちょっとおせっかいさせていただきました。
Xavalさん、こんにちは。とても丁寧なご指導ありがとうございました!
ex1 のようなものを、ページコントローラパターンと言うのですね。
アプリケーション規模とアーキテクチャ進化の関係、とても参考になりました。
ページコントローラよりも、フロントコントローラの方が大規模システムに適している、というのは私の(漠然とした)感覚と反対であったので、なるほど、と思いました。
また、「デコレータパターン」と「オブザーバパターン」というのは初めて聞きました。
大規模なアプリケーション開発になった時はPHPベースで開発を進めるのは、もしや無謀…?
以下、私事で申し訳ないのですが。
私は全て独学でプログラミングを勉強していまして(本業はITと無縁^^;)、本・Web検索・直感だけで全てやってきてしまいました。最近、ある程度規模の大きいWebアプリケーションの計画をしておりまして、そうなると将来の事も考えて設計すべきだと思い。頭の片隅にあった「フレームワーク」という言葉を引っ張り出して来て今に至ります。(先週まで、フレームワークって何? という状態でしたw)
今までは、設計とコーディングを同時に行いながら、色々機能を追加しつつ楽しむ、というスタイルで行くことができたのですが、Xavalさんの仰る通り「ある問題に直面」した、という訳です…w
そしてここでご指導頂いた結果、「こりゃ、使用言語(PHP?)から洗い直し、アーキテクチャをきちんと計画設計してすすめなきゃいかんな…」という結論に至りました。(PHPのフレームワークもまだ未成熟のようですし…。Mojaviの公式サイトサーバは落ちてるし…。ふと回りを見渡すと、かなりのアプリケーション開発がJavaベースになっているし…。)
そこで、アーキテクチャパターンを「説明すれば本が1冊できる」との事ですが、そんな本を一つご紹介いただけませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Ruby パイソンエラーについて 1 2022/12/24 14:07
- PHP PHP ページング データベース 1 2022/06/16 10:30
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- HTML・CSS インクルードした要素がヘッダーにかぶってしまう 3 2022/09/13 17:35
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
- PHP PHP MySql ページング 2 2022/09/20 06:38
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自分で書いた.htaccess添削して...
-
iframe内ページ「戻るボタン」...
-
デフォルトのURLを決めてリンク...
-
it.phpをインクルード
-
他のフォルダにあるPHPをreq...
-
値の引継ぎについて
-
パスの書き方。
-
wordpressのルートのindex.php...
-
<a href = "192.168.1.1/index....
-
携帯からも編集できるwiki的な...
-
【初歩?】functionの使い方
-
OKWebにアクセスしにくくなった
-
旧デザインの提携サイトはまだ...
-
OpenPNEの設定ができません。
-
携帯動画変換君のPSP向けの設定...
-
PEARを使ったメール送信でのinc...
-
DNSサーバ(BIND9)を改造した...
-
.htaccessのRewriteEngineの設...
-
pearライブラリのインクルード...
-
PCサイトとスマフォ用サイトの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zendのcontrollersについて
-
デフォルトでトップページの表示
-
相対パスでrequireはできないの...
-
PHPファイルが、そのまま見えて...
-
require_onceで読み込む場合、...
-
PHPでグローバルナビゲーション...
-
$_GET 取得できない
-
Webアプリにおけるエントリポイ...
-
英語と中国語
-
XAMPPインストール後「セキュリ...
-
ロリポップでSmartyのtpl読み込...
-
風について
-
requireやinclude時の階層の書き方
-
PHP/icludeを使った相対パスの...
-
ZendFramework 環境設定
-
パーミッションの設定
-
XOOPSでユーザーメニューが表示...
-
世界人口白書って何ですか?
-
PEARライブラリで携帯サイト開発
-
htaccess使わずに.phpを.html表示
おすすめ情報