gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

保守性の一例

んと。まぁ目の前に実例があって萎えてるとかって話はおいといて。
とりあえず「ある種の変更にどれくらい容易に耐えられうるか」ってのは、ひとつの指針になると思うです。
例えばWebの場合の設問。


ある1Page(ってか1line)があると仮定します。普通に入力確認完了です。管理画面側にも一覧表示と詳細表示とがあるとしませう。
では質問です。

  • 項目がひとつ追加になりました。変更箇所は何箇所ですか?
  • 項目がひとつ削除になりました。変更箇所は何箇所ですか?
  • ある1項目のvalidateパターンが変更になりました。変更箇所は何箇所ですか?

テンプレートを除く「プログラムの変更箇所」で答えが2以上ならとりあえず「改善の余地がある可能性バリバリ」とか思ってください。


ちなみに目の前にある実例。
例えば1項目追加されるとして。ユーザインタフェース側で8箇所、共通クラス(…なのか?)で5箇所、管理画面で4箇所。合計で実に17箇所の変更箇所が必要でした orz

データ設計くらい疎結合でさぁ…

あちこちに「実際に密接につながるべきデータ塊(構造体とかクラスとか、俺的にはNGだけどhash配列*1とか)が散らかってる」「別々の処理をするべきものがひとつのデータ塊になってる」。


どっちも勘弁ざます。
頼むからもうちょっとデータ設計きちんとやってくれ orz


悲鳴と愚痴込みで、ちと記述。
ってか…疎結合って最早死語なのかしらん………

*1:hash配列そのものがNGなんじゃなくて、データ塊としてhashを使うのが嫌だ

ディレクトリ名は永遠に

んと。includeやらrequireやらuseやらで、時々見るのがこーゆーの。
とりあえず、たぶん一番一般的っぽいinclude構文にしてみます(基本C++ユーザだからねぇ)。

#include</hoge/ng/absolute/path/hogefoo.h>

端的にいって。
このプログラムをよそに持っていくと動かないことおびただしいざます。


基準になるディレクトリは「なにか別の方法で指定して」、include系に書くのは「そこから先の相対パスのみ」にしませう。
Perlなら

#!/usr/bin/perl -w -Iいんくるぅどぱす

とか、PHPなら

$dir = "/opt/www/MW";
set_include_path(get_include_path() . ":" . $dir);

とか。
cとかc++とかはおとなしくMakefile作れ。javaはどうやったっけか?(苦笑


これで、どこかに持っていっても「一箇所だけ、基準ディレクトリを書き換えれば」OKになるです。


プログラムを書くときは。常に「違う環境に持っていったとき」のことを少しだけ考えておきませう。
山盛り考えるとしんどいからw

まとめろ!!

実際ぶち当たってるソースで結構困ってるのですが。
たとえば。パスワードをハッシュ処理(または暗号化処理)するってのは、割合に良くあることだと思います。
ハッシュと仮定して、とりあえず

  • 新規登録時
  • パスワード修正時
  • ログインの時
  • パスワードリマインダ系の処理の時

などにハッシュ処理が行われると思うのですが。これを、割合に皆さん「どうせ1〜2行の処理だし」ってことで

パスワードハッシュ値 = md5(パスワード平文);

って書いちゃうことがままあります。
個人的にはこれは「悪いコード」だと思ってます。


ここは、ひとかけらほど手間でも

パスワードハッシュ値 = パスワードencode(パスワード平文);

と関数(かより理想的にはclass)にラッピングしておくほうが良いと思います。


で、これがもうちょっとひどくなると「何十行と同一なソースをコピペしている」状況を多々拝見します。
通化にはそれはそれでハードルがあるのですが(その一致性が「偶然」なのか「必然」なのかの判断)、それでも「ちゃんとやろうよぉ」な状況は少なからずお目にかかります。
特に「共通化は大事だと思うんだけど既存のコードが散らかってるから」って理由でcode hazardを広げてるケース。
そーゆー歴史が見えるようなソースを読むたびに…気力が抜けていきます(苦笑


っちゅわけで。
「ちゃんと共通化しませう」。

シリーズ「良いコード悪いコード」始めてみます

ほぼ完璧思考実験ですw


んと…「良いコード」の定義は難しいと思うのですが。できる限り「こういう観点からこの辺が良いと思う」的記述を。
「(特殊な状況を除いて)明らかにNGなコード」ってのもあると思うので、そっちを「悪いコード」として。
私の主観と独断と偏見でちと考察してみたいと思ってます。


ちと書きなぐって、そのうちうまくまとめられるとうれしいなぁとか思ってます。