- ベストアンサー
複数のアプリケーションを設置する場合について
- 複数のアプリケーションを設置する際、適切なファイル構成は何か?
- コントローラ毎に分けるか、モジュール毎に分けるか、その他の方法は?
- アプリケーションを自然に分けるためのアドバイスを教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お久しぶりです。 module単位で分けておくと後々便利かなと思います。 掲示板であれば、 ・フロントのユーザが見るページ(IndexController) ・スパムチェックだとか管理者がいじる設定ページ(AdminController) とかといった内容。 ブログも似たような感じでしょうか。 さらに、module間を出来るだけ疎結合にしておけば、後でそのモジュールのみ別のシステムに組み込む、ということも出来ると思います。 例えば、ブログのAdminControllerにも、掲示板のAdminControllerにもloginページを用意しておいて、 設定ファイルか何かで、統括的に管理するコントローラがあることを知らせた場合は、 <?php public function login(){ if(設定ファイルに別コントローラで統括管理すると設定されていた場合は){ $this->_redirect('/main/login'); } } ?> みたいな感じでメインのコントローラにリダイレクトさせちゃったりすれば、統合出来、 その設定ファイルがなければ単独で動かせる、というような感じで。
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
wordpressを引き合いに出したのは、単純にそういうやり方もある、ということの紹介です。 wordpressは、PHPフレームワークよりも一階層上のレイヤーに乗っかっているフレームワークで、 wordpressが提供しているAPIに合わせれば、簡単にアプリケーションの機能を増やせる、ということです。 ですので、もし機能をモジュール単位にするのであれば、ZendFrameworkにて、大枠のCMを作ってやって、 それに合わせる形で機能を作っていったら、簡単に機能を増やせるような実装もできるわけで。 そういう意味で、そのwordpressというフレームワークの手法ということが何かしらの実装のヒントになるのではないかなと思い、紹介しました。 それとは別に、これからCMSのようなものを実装するということで、モジュールという単位を使用する、ということであれば、 単体でも動くし、CMSにプラグインという形式で載せれば、上手く結合出来るような作り方をしたら面白いのではないかなと伝えたかったんですが、わかりづらかったですね。 尚、モジュールの単位考え方なんですが、 モジュールは、ライブラリとしての単位というよりも、「Webアプリケーション」としての単位として、 1つの塊があるという考え方かなと思います。 今回私が言っていることは、自前で実装した掲示板に対して追加処理を行う(または継承してつかう)掲示板を作るのではなくて、モジュール単体でも動くし、大枠のCMSを作ったとして、それにプラグインのような形で上手く管理画面側をくっつけることでも動作する、ということを想定していました。
お礼
ご回答ありがとうございます。 たしかに自分の考えてたやり方だと無理がありそうな気がしますね。。。 なんとなくですが仰ることのイメージはできてきたのですが、 はっきりと理解する(作成する)まで時間がかかりそうなので、 ここで一旦質問を終わりたいと思います。 参考になりました。ありがとうございます。
- hogehoge78
- ベストアンサー率80% (433/539)
■静的ページの扱いに関して ヘッダやフッタ部分、サイドナビゲーション部分というのはどのページでも大体共通になると思います。 HTMLデザインを大量に作成してみればわかりますが、フッタの一箇所に、後からトラッキング用のタグを埋めたい といった話が出てきた場合、単純なHTMLで作成すると、全ページ更新していかなければいけないわけです。 それであれば、Zend_Layoutなどテンプレートシステムを使って、一括で管理できたほうが楽です。 そうするとたかだか会社概要のような固定ページにたいして負荷が気になりますが、Pear::Cache_Liteのような、ページキャッシュを上手に使って、サーバ負荷もへらしていけば良いのではないかなと思います。 結論として、Zend_Frameworkで作るなら、基本的に全部Zend_Frameworkで作ったほうが良いのかなと思います。 ■モジュールに関して つまり、Zend_Frameworkを使っていれば、application.iniあたりに設定が出来ると思うので、 そこにフラグだけ建てるようなものを用意すれば良いのかなと。 [application.ini] bbs.standalone = "false" bbs.logout_callback = "example/login" とかというような。 一番上のbbs.standalone、コレがtrueの時は、loginメソッド(ページ)が有効になるような作りにして、 bbs.logout_callbackで、ログアウトボタンが押された時にどこのlogin画面にリダイレクトさせるか設定してみたり。 >掲示板モジュールで(利用する側で)柔軟なことを実現しようとすると掲示板モジュールはかなり複雑なプログラムになりませんか? 仰るとおりで、汎用性を考えるとプログラムがかなり面倒なことになります。が、のちのち使いやすくするために今面倒なことをしておくと考えれば・・・ ■その他 ただ、今回の掲示板、静的ページ、ブログ、ぐらいしか実装しないということであれば、一度wordpressなどのCMSをインストールして弄ってみるのも新鮮で面白いと思いますよ。 プラグイン(モジュールのようなもの)や、テーマ(レイアウトに使用するテンプレート)を開発することで、基本のCMSの管理画面を拡張したり出来るので、効率もいいです。 また、管理画面の出来の良さや、設置の簡単さにも結構びっくりします。 また、いじっていると自分でCMS作るにあたってのモジュールと基礎実装のCMSのうまい切り分け方とかのヒントにもなるかもしれません。 是非、ローカルの開発環境にでも。 ※モダンなフレームワークをいじった後にwordpressをいじると、若干いらっとすることもありますが。
お礼
ご回答ありがとうございます。 早速wordpressを使ってみました。 要はこれってモジュールという機能をそれを理由するユーザーにとってより便利(楽)に しようとすると、新たにPHPなどのプログラムで書く部分ってこれぐらい少なくなるということですよね? 自分がモジュールに対してイメージしてたのは、例えば モジュール側をbbsmodule【掲示板プログラムの便利な部品群】(確認なのですが、hogehoge78さんが仰る[application.ini]ってこちら側に設置してある[application.ini]ですよね?) それを利用する側をbbsuser【主の掲示板プログラム(bbsmoduleを利用する側)】 とすると、URLでいうとbbsuserが主で http://localhost/bbsuser/(掲示板のトップページ) http://localhost/bbsuser/post/(掲示板の投稿フォームページ) という感じで利用するユーザーが新たに作ったbbsuserを基本的にURLで進んでいく感じで、 そこでbbsmoduleに利用できそうなページがあったら http://localhost/bbsmodule/admin/comment_delete/ みたいなZendフレームワークでいうモジュールを置いてある場所のURLになるわけです。 例えば基本的に管理者画面内のデザインなんてどうでもいいというか コメントというデータを削除さえできればよく、それって共通な処理にし易いですよね? ってな感じで、あくまでもURL的な意味でもbbsuserが主で、徐々にbbsmoduleで共通化できそうな処理を 増やしていくイメージを想像してたのですが、wordpressってそれとは少しというか違うような印象なのですが。。どうなんでしょう。 すいません、毎回自分の漠然とした分かり難い^^;説明で申し訳ないのですが、 hogehoge78さんのイメージしてるモジュールは上のような説明の内容と同じでしょうか?
お礼
ご回答ありがとうございます。 すいません、少し本題からそれてしまうかもしれませんが、 簡単な構成のサイト(メニュー構成は、トップ、about、掲示板、ブログ、お問い合わせ、など)を作ってみようとしたのですが、 どこまでをPHPなどのプログラムで作成していけば良いのか悩んでいます・・・ 例えばトップページやaboutなどはHTML(つまりindex.htmlやabout.html)だけで作って プログラムが含まれるページ(掲示板、ブログ、お問い合わせ)などはフレームワークなどのPHPを 利用してページを表示させる(つまりZendなどのurl表記だと~.com/about/ みたいな)感じが良いのかなぁとか、 それともYouTube(http://www.youtube.com)のように(?)トップからなにから全部PHPなどの プログラムで構成されたサイトの方が作る方としてはすっきりするし、 パンくずリストなども結局PHPなどのプログラムで制御しないとできないですよね?というのもあり、 こちらの方がいいのかなぁと思ったり。。 ちょっとこの説明の仕方^^;だとhogehoge78さんに伝わるかは心配なのですが、 この点についてもアドバイス頂けないでしょうか? 本題の質問ですが、確認なのですが、 module単位で分けるとして、他のアプリケーションなどから利用する場合に その作成したmodule(例えば掲示板モジュール)というのは一切変更しないわけですよね? 例えば、一般的にライブラリとかフレームワークは他から利用するときに 基本的にそのプログラムを改造したりしませんよね。それと同じイメージなのですが。 というのも、自分のモジュールに対する考え方があいまいな部分があって、 hogehoge78さんの仰る設定ファイルというのは、利用する側に設置する設定ファイルであって それをモジュール側で読みに行くわけですよね? そうだとすると、例えば掲示板モジュールで(利用する側で)柔軟なことを実現しようとすると 掲示板モジュールはかなり複雑なプログラムになりませんか?(自分としてはそういうのを作るのが好きなので構いませんが^^) 例えるなら、掲示板はそんな難しくないけどレンタル掲示板は難しいみたいな。。。 いろいろ聞きたいことが溜まってまして^^一気に聞いて申し訳ないのですが、アドバイスをお願いします。