2009年9月6日日曜日

システム開発アンチパターン~メソッドのパラメータに配列使うな!

この秋の情報処理技術者試験ですが、「システムアーキテクト」試験を受験します。論文書かなきゃいけないので、ネタ探しにこれまで携わったプロジェクトに関しての個人メモを見返しました。えっと、1年目から愚痴ってるなぁ~(悲)。一部紹介しますと
  • 「ながら」仕事をする。音楽聞きながら、メッセンジャーしながら、2ch見ながら・・・。そういうことしながら仕事するギークがいるらしいが、それとは訳が違う。だって低品質だもの。
  • 残業時、夕食に出かけて1時間半近く戻ってこない。しかし我が社の勤怠制度では、休憩時間は見なしで固定45分(残業時は+30分)であり、5時間休憩しても休憩無しでもその時間で固定。当然、1時間以上夕食してても、その間の残業代はきっちり支払われる。ふざけんな!
  • 今時(当時2006年)、オープン系システムの開発&デバッグ端末でメモリ512MBってどういうこと?
  • 共通部品で「すべて置換」されたせいでデグレ発生。
...etc。
また殆どのプロジェクトにおいて、エビデンスの見てくれに無駄に手間を掛けさせることへの不満や、他人のソースコードの低品質に対する悪態をついています。今従事しているプロジェクトで苛つかされてるのと全く同じ嘆きもあり。

ちなみに、現在のプロジェクトのシステムは別の会社が作ったものであり、僕の会社作ではないです。余所でも同じ事をしているということは、結構やってしまいがちな事なのかな。であれば、同じ過ちを繰り返させないためにも、過ちによる悲しみを増やさない為にも、ここで一部ご紹介します。アンチパターン(やってはいけないこと)として。

メソッドのパラメータ数が多いからといって、パラメータにHashtableやString[]を使用してはいけない

※これはオブジェクト指向言語に関してです。
商品情報をDBに登録するメソッドがあり、登録値をパラメータとして渡すのですが、それの作りが以下のようになっていました。ちなみに言語はJavaです。

もうね、訳が分かりません。何番目に何が入っているかなんて分かりません。せめてインデックスを定数化しておけと。いや、そう言う問題じゃない。配列で渡しては駄目(ArrayList等も同様)。この他によく使われるのがHashtableなのですが、これも良くない。存在しないキーでget()しても、コンパイルエラーも実行時エラーも発生しないので。
折角オブジェクト指向言語使っているんだから、クラスの形で渡しましょう。これならメソッド名見ただけで何の値か分かる。


return値に関しても同様です。要するに、値の受け渡しにはクラスを使いましょうということです。

以上、超弩級低レベルな話でした。
もう一つどうしても紹介しておきたいことがあるのですが、それはまた別の機会に。

0 件のコメント: