PHP5で開発をするときに、拡張性を高くためにはどのようなことに気をつければいいのでしょうか。

機能を増やそうとすると、どうしてもフラグを立ててif文やswitch文の連打になってしまいます。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2006/06/27 18:05:34
  • 終了:2006/06/30 14:27:31

ベストアンサー

id:tarchan No.5

たーちゃん回答回数200ベストアンサー獲得回数22006/06/27 23:49:50

ポイント50pt

WebプログラマはRailsに乗るべきか?

http://www.atmarkit.co.jp/fjava/column/andoh/andoh29.html

どの言語で開発するかに関わらず、規約を決めて自動的にハンドリングできるように設計することです。

URLを http://host/app/command と決めてcommand 名でファンクションを呼び出すようにすれば機能を増やす時も分岐命令を増やす必要はなくなります。

id:takets

ありがとうございます。

ruby on rails、DBの関連づけがすごいですね。

自分には出来そうもないと考えていたんですが、本当に拡張性をどうにかしたいと考えるなら避けて通れないような気がしました。

少し気になったのは、command名でファンクションを呼び出すというところです。

確かにそれだけに絞れば分岐はなくなりますが、本当に単機能に絞らないと実現できなさそうで、どのようにしてcommand名を特定するのかが気になります。

例.

1のとき /app/command1

2のとき /app/command2

(区別するために分岐が必要?)

結局、command名を呼び出す部分には分岐が入ってしまいそうですが……。

2006/06/28 01:03:01

その他の回答(6件)

id:yoneto164 No.1

ヨネちゃん回答回数813ベストアンサー獲得回数942006/06/27 19:09:41

ポイント50pt

PHPに限ったことではないのですが、function() を使ってサブルーチンを沢山作り、if や switch からはサブルーチンを呼び出すだけにするという方法が一般的かと思います。

http://www.shigeweb.jp/php/project_p/?section=first&page=fun...

if や switch を沢山使うのは仕方ないと思います。次期の拡張に備え、常にソースを見やすくすることが得策なのではないかと思います。

id:takets

ありがとうございました。

ソースのメンテナンス性の重視にも気をつけたいと思います。

2006/06/27 19:52:01
id:typista No.2

typista回答回数359ベストアンサー獲得回数72006/06/27 20:37:47

ポイント50pt

やや難しいかもしれませんが、オブジェクト指向で設計し、実装することです。

http://www.atmarkit.co.jp/flinux/special/php5/php5b.html

id:takets

ありがとうございます。

できれば、オブジェクト指向で設計するときの注意点があれば聞きたかったです。

2006/06/27 21:13:43
id:ymlab No.3

ymlab回答回数508ベストアンサー獲得回数342006/06/27 21:12:31

ポイント50pt

http://www.thinkit.co.jp/free/marugoto/1/5/1/

URLはPHP5のXML関係の記事です。

今日の自分のコードは明日の他人のコードという言葉があるように、

コードを美しく設計するのはもちろんのことですが、

ログを出力する関数を作成しておき、

すべてのファイルにincludeしておけばよいのではないでしょうか。

また、これは私の趣味の範囲なのですが、インタフェースと、DBアクセスのファイルは分けておき、一発でDBアクセスに関するディレクトリはここ!と分かりやすくしておくことです。


ちなみに私はPHP5でもあまりオブジェクト設計していません。

PHP4の時にデストラクタがない等えらい苦労をさせられたので。

なんというか、もう一息頑張って欲しいのですよ。

id:takets

ありがとうございます。

ログ出力は参考になりました。

設計も重要ですが、原因究明を楽にする方法も合わせて用意しておくのは安心で良いですね。

2006/06/28 00:34:45
id:m-nisi No.4

m-nisi回答回数159ベストアンサー獲得回数32006/06/27 21:15:19

ポイント50pt

オブジェクト指向でやるか、サブルーチンでやるかは

個人の好みの問題だと私は思います。

どちらでやるにしろ、小さい処理や機能ごとに分割しておく事で

コードの使いまわしも出来るようになります。

あと、ifやswitchが多くなるの必然です。

それなりに大きい物を作ろうと思うとそうなってしまいます。

上の人も書いてある通り、ソースを見やすく書くのもいいと思います。

例えば、インデントをきちんとするとか

適切にコメントを付けるとか

変数名を自分なりの規則で統一するとか。

ダミーURL

http://q.hatena.ne.jp/

id:takets

ありがとうございます。

if文の多さは必然なのですか。よく世にあるオブジェクト指向の本ではif文とかを蛇蝎の如く嫌っているんじゃないかと思えるような場面に出くわすことが多いので、新鮮でした。

読みやすいソースのルールを整備するのも、結果として拡張しやすいように造る道の一つではありそうなので、コーディング規約を考えてみます。

2006/06/28 00:39:12
id:tarchan No.5

たーちゃん回答回数200ベストアンサー獲得回数22006/06/27 23:49:50ここでベストアンサー

ポイント50pt

WebプログラマはRailsに乗るべきか?

http://www.atmarkit.co.jp/fjava/column/andoh/andoh29.html

どの言語で開発するかに関わらず、規約を決めて自動的にハンドリングできるように設計することです。

URLを http://host/app/command と決めてcommand 名でファンクションを呼び出すようにすれば機能を増やす時も分岐命令を増やす必要はなくなります。

id:takets

ありがとうございます。

ruby on rails、DBの関連づけがすごいですね。

自分には出来そうもないと考えていたんですが、本当に拡張性をどうにかしたいと考えるなら避けて通れないような気がしました。

少し気になったのは、command名でファンクションを呼び出すというところです。

確かにそれだけに絞れば分岐はなくなりますが、本当に単機能に絞らないと実現できなさそうで、どのようにしてcommand名を特定するのかが気になります。

例.

1のとき /app/command1

2のとき /app/command2

(区別するために分岐が必要?)

結局、command名を呼び出す部分には分岐が入ってしまいそうですが……。

2006/06/28 01:03:01
id:tarchan No.6

たーちゃん回答回数200ベストアンサー獲得回数22006/06/28 03:15:13

ポイント50pt

PHP: call_user_func - Manual

call_user_funcのような名前で関数を呼び出す仕組みを利用します。

コマンド名と関数名の変換規約が一つなら、関数を呼び出す部分は一度作るだけで済みます。

id:takets

なるほど。

関数を呼び出す部分を統一することで、分岐を意識することなく、command名を開くだけで実行できますね。

呼び出し部分の統一によって変数のエスケープや妥当性検証のフィルタとしても応用がききそうで、面白そうです。

さすがにこの関数を使ったサンプルソースは見つからないですね…。

ありがとうございました。いろいろ試して体得していきたいと思います。

2006/06/28 06:38:36
id:hammm No.7

はむ!回答回数11ベストアンサー獲得回数02006/06/29 02:00:36

ポイント50pt

ネスト(ソースコード内で字下げする深さ)が5~7レベルより深くなっているようであれば、「何かおかしいのではないか?」と思ったほうが良いと思います。


ソースを書いていて、コードをコピ-&ペーストするときには注意しましょう。「本当にこのコードはコピーすべきなのか?」「関数にしたほうが良いのではないか?」


ごく一般的な原則としてこのようなものがあります。

・同じコードを複数回書かない(DRY (Don't Repeat Yourself) 原則といいます)

・コードをできるだけシンプルに保つ

・マジックナンバー(数値定数をそのままコードで使用すること)を使わない

・変数、関数に一貫性のある、良い名前をつける


ある機能について、関数とフラグの組がある程度揃ってきたらクラス化する、というのも手です。(あまり周囲との依存性が高いと使いづらいクラスになるので注意)


その他、プログラムをシンプルに保つ方法については「リファクタリング」で検索するといろいろ出てくるものと思います。(PHPに関するものは少ないかと思いますが、プログラミング全般に適用できる考え方です)

リファクタリング―プログラムの体質改善テクニック

http://www.amazon.co.jp/exec/obidos/ASIN/4894712288


以下も一読の価値ありです。

Cプログラミング診断室(こちらのURLで本の内容がすべて読めます)

http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html

id:takets

リファクタリング、早速買って読んでいます。

ソースの修正を定常的に行うという発想に感心しました。

しかし、会社がクラス禁止の関数のみでコーディングしなければならないことが判明し、当分使う機会はなさそうです。

PHP5なのにC言語を書いている気分です。はふー。

2006/06/30 13:45:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません