ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

OSSがその分野にある以上、いままで書いたやり方は、認められない。訳知り顔の人に全否定されるから

2005-11-24 18:48:00 | Weblog

 いままで、いろいろと、PHPにおいて、画面と処理プログラムを分離し、MVCを実現するためのコーディング規約と、実際のユニットテスト方法に書いてきましたが、では、実際に、この規約で、開発することが認められるか?というと、たぶん、100%不可能です。

 理由は、PHPにおけるMVCのフレームワークが、各種テンプレートを使う形で、「オープンソフトとして」たくさんでてるから。。

 オープンソフトで出ている場合、
・そのオープンソフトを使わなくても、(今まで述べたように)できるとしても
・で、そっちのほうが(テンプレートのバージョンの問題がない分)、バージョン管理の問題がないとしても、
・オープンソースのプログラムの作り方を覚えなくてすむ分、開発が短期ですみ、
・さらに(strutsのチェックボックスは、先にクリアしておかないと。。みたいな)知らないと大変な目にあうTIPSを知らなくていいぶん、ずっとリスクが小さかったとしても、

 ぜったい、自分たちの創意工夫は否定され、「そーいう苦労をしなくていいように、オープンソフトがでてるんだから、オープンソフトをつかえ、このばか!」と、指示が来て、そのため、
・オープンソフトを使わないほうが、開発工数が少なくてすんでも、
・(そのOSSの)バージョンアップのときに互換性を考えないで作られて、
  あとで修正を入れなきゃならないかもしれないリスクをはらんでいても、
オープンソフトを、つかわさせられるわけよ(>_<!)。。

 いや、グループ会社や取引先の会社のツールやソフトをつかえ、っていうなら、大賛成だよ!

 それにより、取引先のうりあげあーっぷ!かんけいあーっぷ、で、間接的に、自分たちの収入安定につながってるわけだから。

 でも、オープンソフト使っても、売り上げ、あがらないでしょ。。

 え、自分たちの転職に有利だ!って。。

 一時的にはね。でも、この業界、ずーっと続いている言語もないし(COBOLはつぶしが利くとかむかしはいわれたんだよねー。あ、Cも、そんなこといわれたね。今はJAVAかい (^^) )ましてや、あるオープンソフトがずーっと使われるという保証もない。

 それどころか、ある日突然、正反対のことをいわれるのよねー。

 たとえば、Cの黎明期は、いかにメモリーをつかわないか、っていうことが、マニアック的にきそわれたりしていた(プログラム領域の制限があったから)。いま、Javaだったら、メモリーの制限。。。といっても、、メモリ確保の制御、できないっしょ(^^)

 ま、こんな理屈っぽい話をしなくても、一目瞭然だよね。

 いままで読んできてくれた人(なんて、いるのかなあ。。)だったら、あのやり方、PHPでなく
・画面部分をJSP
・プログラム部分をサーブレットで書けば、
strutsを使わずに、プログラム規約で、MVCに分けてかけることに、気づくはず。

 で、そうすれば、Strutsタグを覚えなくていいし、Strutsのバージョンの問題もないし、サーブレットのユニットテストもできるし。。といろいろいいことあって、そんなこと、システムやってる人なら、すぐに思いつくんだけど、じゃあ、Strutsじゃなくって、そーやって、コーディング規約を作ろう!っていう話は、でないわけよ。。

 「Strutsつかえ!」と訳知り顔の人間に全否定されちゃうよね。

 いや、そんな、「コーディング規約で簡単にできるよ!」といったら、「規約は守んない人間がいるから、だからオープンソフトなんだろー、そんなこというお前って、技術者としてどーなの!」
 とかいって、訳知り顔の人間に、自分の存在意義自体を全否定されかねない!
 だから、みーんな、そんなこと知ってても、思いついても、だーれもいわない。。
 これが現実なのよ。
(Strutsでも、MVC無視して、規約を守んない人が出てきたら、おなじじゃん。なんて、間違っても、いえない)

 で、今後も、(まあ、ずーっと前、ブログに書いたように、一部では、そういうことから、自分たちで作って、難易度を下げようていう機運も出ていることは確かだけど)オープンソフトなのよ。

 その結果、

・バージョンアップや相性のリスクが増えても、
・それを学習するために生産性が下がっても、
・その学習についてこれる人を用意しなくちゃならないから、単価上がっても、

いや、

・それを使うことによって、客に迷惑をかけてもね。

 だからさー、遅いといわれるCORBAでも。。。
(ここで、ある会社を連想できる言葉を書きそうになったので、この部分カット。
 べつに、ここはgooブログだから、いいんだけどね。。。gooの子会社に証券会社ないしー(^^;)




 もっとも、これが、権威のある人が、いったら話は違うんだけどね。

 たとえば、某業界有名人が、雑誌にこういう話をかけば、これは、こういう考えも検討される。

 そう、この業界、権威の発言は、まんせーなのだ。

 その権威の発言が、だれがみても、へん??

 っていう発言でも、権威が言えばOKなのだ。

 この実例について、ウィリアムのいたずらは、現在、ブログネタを準備中。

 覚えていたら書く。期待しないで、待っていてくれ。

 でも、うぃりあむのいたずらのような、「ぷーたろう」みたいなやつ(=フリーなので、会社に所属してないっていうことは、ぷーたろうと一緒)がいっても、だれも見向きもしないわけだ。

 これが、某大学教授、某上場企業の若手課長とかいったら、また違うんだろーけどね。

 そう、オープンソフトの話は、この権威と結びつき、否定できない方向にいっている。




 なわけで、じゃあ、今まで書いてきたことは、意味ないのか??っていうと、

 表面的には、まったくの無意味。

 これ、自分がぜーんぶ勝手にやっていいのであれば、そういうやり方を採用できるかもしれないけど、上記の理由により、ペアプログラミングなら、相手に否定されれば、どんなにいいやり方でも、そこで「終了」だし(本当にすごいやり方というのは、作る前には、他人に理解できない。出来上がってみて、使ってみて、すごさが分かる)
 グループでやるなら、訳知り顔の人に、「オープンソフトを採用すべき、お前の考えなんて、ききたかねーよ!、くだらねーことかんがえず、盲目的に、オープンソフトまんせーって言えばいいんだよ」で終わってしまう。

 しかし、実は、今までの話は、MVCの表面的な話でなく、奥義的な話になったとき、生きてくる。

 オープンソフトの使い方を覚えても(つまりStrutsの書き方を覚えても)その部分は、見えてこない。で、実は、そこを説明するために、わざわざ、この話を書いたんですねー。

 で、その奥義とは。。。

 書こうと思ったら、時間切れだ(>_<!)

 さ、いそいで、移動です!

 っていうことで、覚えていたら書きますね。ぜーんぜん期待してないで、待ってて。。


 くれなくていいけどおー(^^)v

 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

コントローラーに、起動するプログラムの情報を持たせる方法

2005-11-24 15:29:59 | PHP

 きのうのブログで、PHPなどでMVCを行う方法について書きました。
 PHPなど、と書いたのは、実はこのやりかた、PHPじゃなくってもかまいません。
 画面表示部にあたるVIEWをJSPで書いて、処理部分をサーブレットやCGIでも、OKです。

 で、昨日までのやり方だと、コントローラーは、処理部分や、画面から指定されたURL先に、そのままジャンプしているだけです。言い換えると、コントローラー側では、次に起動するプログラムの情報はありません。
 このことは、いい場合もあります。たとえば、開発のはじめの時期において、どのような画面構成にするかどうかが決まっていない場合でも、部分的にでも決まっていれば、呼び出せることや、全体像について誰も知らなくても、このシステムなら、次の処理先さえ分かれば、問題なく処理できるからです。

 でも、逆に、コントローラーに、次に遷移する画面を、すべて登録しておいて、コントローラーさえ見れば、このシステムで、どのようなプログラムを使うのか、すべて把握したい場合もありえます。
 今回は、そのようなコントローラーで、すべての遷移プログラム情報を保持するケース(カオル姫-テンさん方式(集中)についてです。




 この場合、昨日の例では、nextURLに次に遷移するURLを書いていましたが、
 今回は、nextJobに、次にうつる仕事の指定(処理なのか、正常画面なのか、エラー画面なのか)を指定します。
 そして、コントロールを呼び出し、コントロールは、nextJobの値をみて、処理なり、各種画面なりに遷移するというものです。

以下、具体例で説明します。例の内容は、昨日のブログとおなじく、伝言板です。



■■ 具体例

● コントローラーのようす
 まずは、一番大きく変わる、コントローラーについて
<?
//==============================================//
//						//
//	コントローラー(nextJobで飛び先決定)	//
//						//
//==============================================//
	//	セッションをスタートさせる
	session_start();

	//	引数をセッションにいれる
	foreach($_POST as $key => $val)
	{
		$_SESSION[$key] = $val;
	}
	foreach($_GET as $key => $val)
	{
		$_SESSION[$key] = $val;
	}

	//	次のURL(VIEWまたはモデル)へ遷移

	if ( $_SESSION['debug_mode'] == "YES")
	{	//	デバッグモードのときには、デバッグ用画面
		$headwd = "Location:debug.php¥n¥n";
	}
	else
	{	//	それ以外のときは、次のURL画面
		switch($_SESSION['nextJob'])
		{
		case	"OK":
			$headwd = "Location:OK_shutyu.php¥n¥n";
			break;
		case	"SHORI":
			$headwd = "Location:shori_shutyu.php¥n¥n";
			break;
		default:
			$headwd = "Location:NG_shutyu.php¥n¥n";
			break;
		}
	}
	header($headwd);
?>

(上記の < > ¥ は実際には、半角のものを使ってください)
前のものと変わっているのは、次のURL指定、nextJobの値によって、遷移先を変えています。


●呼び出し側
 はじめに、フォームにユーザー名を入力し、コントローラーを呼び出すHTML画面は、こんな感じです。
<HTML>
<HEAD><TITLE>てすとだぴょん</TITLE></HEAD>
<BODY>
<Form action="ctl_shutyu.php "method="post">
    <input type="hidden" name="nextJob" value="SHORI">
    Name:  <input type="text" name="username"><br>
<input type="submit" name="submit" value="実行">
</form> 

(上記の < > ¥ は実際には、半角のものを使ってください)

前のnextURLのかわりに、nextJobで、次の画面を指定してます。
あと、actionの呼び先が変わってますが、これは、たまたま呼び先を変えたから、こうなっただけです。他には、基本的に変わってません。

●処理(モデル部分)について
 処理についても、同様で、違いはnextURLがnextJobになったこと、飛び先が変わったことだけです。
 こんなかんじ。
<?
//==============================================//
//						//
//	伝言設定処理部分			//
//						//
//==============================================//

  	//	セッション開始
	session_start();

	//	データセット
	//	本当は、DB検索とかをする
	$rec['simei'] = "社長";
	$rec['naiyo'] = "健康に注意して馬車馬のように働け";
	$data[1] = $rec;

	$rec['simei'] = "部長";
	$rec['naiyo'] = "オレの給料を上げるため、お前らは死ぬほど働け";
	$data[2] = $rec;

	$rec['simei'] = "係長";
	$rec['naiyo'] = "あのー、できないことを要求されても、できません";
	$data[3] = $rec;

	$_SESSION['dengon'] = $data;

	//	次のURLを設定
	if ( $_SESSION['username'] == "課長" )
	{
		$_SESSION['nextJob'] ="OK";
	}
	else
	{
		$_SESSION['nextJob'] ="NG";
	}

	//	コントローラーに戻す
	header("Location:ctl_shutyu.php¥n¥n");
?>

(上記の < > ¥ は実際には、半角のものを使ってください)

●画面(VIEW)について
 今回変わったところは、nextURLがnextJobにかわったことと、処理先です。
 よって、これらを使わない、表示だけの画面(正常画面OK.php)は、変更はありません。
 入出力を行うエラー画面のみ、nextJobの指定方法と処理先が変わります。
 こんなかんじ

<?
//==============================================//
//						//
//	NG画面(もう一度再入力)		//
//						//
//==============================================//
	session_start();
?>
<HTML>
<BODY>

<h1><font color="red">入力した名前は間違えています</font></h1>

<Form action="ctl_shutyu.php "method="post">
    <input type="hidden" name="nextJob" value="SHORI">
    Name:  <input type="text" name="username" value="<? print $_SESSION['username']?>"><br>

<input type="submit" name="submit" value="実行">
</BODY>
</HTML>

(上記の < > ¥ は実際には、半角のものを使ってください)




 ということで、これで、一通りの画面とプログラムの分離方法について、ご披露いたしましたが、

 じゃあ、これを使おうか?となると、実際は。。。

 というお話を、覚えていたら、気が向いたときにします。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

中国って10万のケータイあるんだって!W-ZERO3の2倍っすかあ(@_@!)

2005-11-24 09:54:34 | Weblog

 今日、「朝は楽しくで」、中国のカード型ケータイ(NEC製)を紹介していて、その値段がなななんと、10万円!!っていうのをやってました。

 ありえねー。ケータイが10万なんて(@_@)

 パソコンが買えます。

 この前、たしか、テレビ東京の11時ごろのニュースでW-ZERO3は5万円くらいで出るっていうことなので(通話料はもちろん別で、毎月かかります)、まあ、PHSなんですけどパソコン(PDA?)つきの電話? の2倍です。

 ありえません。

 日本では売ってないそうです。そうでしょー

 でも、中国では、売れてるそうです。

 それも、ありえねー。どーしてケータイに10万もかけて、買うんだ??




 ただ、W-ZERO3は、いいですよねー。
 まあ、だいたいやりたいことは、ひととおりできそうだし。。

 でも、5万。。。ウィリアムのいたずらにとっては、たかい。

 まあ、そのうち、待ってると、やすくなるかもしれないので、
 出始めても(いつでるかわかんないけど)すぐには買わないで、やすくなるまで待つことにしよう(なんなかったりして >_<!)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする