プロが教える店舗&オフィスのセキュリティ対策術

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を勉強し始めたので理解が浅いのですが、上記の考え方の正解と不正解を教えて下さい。

A 回答 (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で最大限のパフォーマンス」という方向性は、これは現状やむなしかなぁ、と思っております。

以上雑感込みで恐縮ですが。
    • good
    • 0

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同様オープンソースで利用率が高く、避けては通れません。いずれは使用することになります。
(後半になってくると、言語を学習するかどうかは問題ではありません。)

小さなことですが、補足です。
デコレータとオブザーバについてですが、
「フロントコントローラに加えて、受信フィルタ(デコレータ)の追加導入」
という言い方のほうが正しいかと思います。オブザーバも同じです。
    • good
    • 0

.NET で2年くらいFW作成しています。



エントリポイントが一つであるメリットは、アクセスパスが一つになるということです。
要求をアクションにマッピングする設定ファイルを解して、
動作を定義できる、というメリットがありますが、
構築がややこしく、小さな変更に対しては開発コストがかかる
デメリットがあります。

これは、MVCでいうコントローラが「フロントコントローラ」
と呼ばれるパターンになります。(JAVA形式)
BBS程度ならページコントローラ(複数のEPでよい)
のほうがやりやすいとは思います。

小さい規模でフロントコントローラを導入すると、
非常に仰々しい開発になります。


一応、参考までに。。。

サイトの規模により、設計パターンは、その規模に応じて
一般的に以下のように進化します。
・MVC化
・ページコントローラパターン
・フロントコントローラパターン
・受信フィルタの導入(デコレータ)
・オブザーバパターン

どの規模がどのパターンなのかは、それこそ、これから
pe_daichan様が体感しながら調整していくことです。
(一人と複数人でも選択境界が違う)
また、上のリストは、必ずある問題に直面したときに、
下のリストに移っていくと思います。
(たとえば、ページコントローラで、ページコントローラ間の継承が複雑になり、
多数のページにまたがる頃合が、フロントコントローラを考慮する時期、とか)
せっかくですから、この設計に悩んだ機会に、これを意識してみては
どうでしょうか?
ただ「作れる」という人は沢山いますが、
このパターンを知って学習するのとそうでないのは違います。

説明すれば本が1冊できるくらいの事なので、
大雑把なことしかいえませんが、なんだかpe_daichanさんが
非常にいいポイントにいる気がしたので、
ちょっとおせっかいさせていただきました。
    • good
    • 0
この回答へのお礼

Xavalさん、こんにちは。とても丁寧なご指導ありがとうございました!

ex1 のようなものを、ページコントローラパターンと言うのですね。
アプリケーション規模とアーキテクチャ進化の関係、とても参考になりました。
ページコントローラよりも、フロントコントローラの方が大規模システムに適している、というのは私の(漠然とした)感覚と反対であったので、なるほど、と思いました。
また、「デコレータパターン」と「オブザーバパターン」というのは初めて聞きました。

大規模なアプリケーション開発になった時はPHPベースで開発を進めるのは、もしや無謀…?

以下、私事で申し訳ないのですが。
私は全て独学でプログラミングを勉強していまして(本業はITと無縁^^;)、本・Web検索・直感だけで全てやってきてしまいました。最近、ある程度規模の大きいWebアプリケーションの計画をしておりまして、そうなると将来の事も考えて設計すべきだと思い。頭の片隅にあった「フレームワーク」という言葉を引っ張り出して来て今に至ります。(先週まで、フレームワークって何? という状態でしたw)

今までは、設計とコーディングを同時に行いながら、色々機能を追加しつつ楽しむ、というスタイルで行くことができたのですが、Xavalさんの仰る通り「ある問題に直面」した、という訳です…w

そしてここでご指導頂いた結果、「こりゃ、使用言語(PHP?)から洗い直し、アーキテクチャをきちんと計画設計してすすめなきゃいかんな…」という結論に至りました。(PHPのフレームワークもまだ未成熟のようですし…。Mojaviの公式サイトサーバは落ちてるし…。ふと回りを見渡すと、かなりのアプリケーション開発がJavaベースになっているし…。)

そこで、アーキテクチャパターンを「説明すれば本が1冊できる」との事ですが、そんな本を一つご紹介いただけませんでしょうか?

お礼日時:2006/09/30 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!