gallu’s blog

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

設定値の記述場所に関する考察

固定値やらナニやらを「どこに書くか?」という考察っていうか自分の中の整理用を兼ねて。
若干PHPを意識している部分もあるので、他言語の方は適当にオミットしてくださいませ。


まず。「書きうる」場所としては、以下の可能性がある。
・DB内の設定table
・テキストファイル
・・PHP的にパース可能な書式
・・「name = value」のような、人間の目に優しい書式
・プログラム内に直書き


とりあえずべからず集っていうか、切ない実話を一つ。


その現場では、全てのバッチ処理において。
・エラーが発生したら所定の設定に従ってエラーを(プログラム的に)報告する
という決まりがありました。
「所定の設定」はDBの中にありまして。そこに「そもエラーを告知するか否か」「どのmailアドレスとどのファイルにエラーを書き出すか」などの設定が、バッチファイル毎に書かれていました。
さて。
どこが「べからず集」でしょうか?


ヒント。
んじゃ、そのバッチの処理中に「DBに接続できない」エラーが発生したら?


「DBに接続できない」はエラーなので、所定のルートに従って報告を上げる必要があり得ます。
所定のルート、または報告の要不要の設定はDBに入っています。
DBに接続できないので以下loop。


否定はしませんが、肯定もしなければ評価も出来ない設計です B-p*1


なんてことをしないためにも。
設定を「どこに書くか?」は、それなりに考察をしたほうがいいんじゃないかと思ってみたり。
ちょいと考察過程は省いて、結論から。


・DB内の設定table
は、原則「やらない」。ただでさえDBはボトルネックになりやすいし、「DBに設定を入れないといけない」強い理由がもう一つ思い浮かばないので。
なので。DBに設定を入れる場合「テキストファイルでは明らかにあずましくないんでないがい?」という考察が十二分に出来てから、のほうがよいと思います。


・テキストファイル:「name = value」のような、人間の目に優しい書式
ユーザさんがある程度自由に書き換えてよいもの、をよくこの書式で作ります。


・テキストファイル:PHP的にパース可能な書式
ユーザにはあんまり書き換えて欲しくないけど、システム的にはある程度「いぢる可能性があるもの」をこんな風に。
或いは「現場のエンジニアなら誰でもいじりうる」可能性のあるもの、とか。
ただ、おいちゃん的には微妙に好まないです。どっちかっていうと「人間の目に優しい」ほうが好きかなぁ、と。他言語展開もしやすいしね B-p


・プログラム内に直書き
ユーザに触らせる気がない上に「先ず滅多に変更がないだろう」と思うものは、勇気を持って直書きw
或いは「現場のエンジニアでも、リーダーとかチーフクラスだけがいじりうる」可能性のあるもの、とか。
defineは、実は切ったり切らなかったり。同じ意味の値が2箇所以上に出てくるのはもちろん論外ですが、それはロジックも一緒だしねぇ B-p
なので案外に、コメントをちゃんと書いた上で「数値を直書く」な事も多いです。必要が出てきたら後で切り出せばいいしねぇ。


いろいろなルールやら規則やら不文律やらありますがそこは守破離
時にはそういうものを「一度疑って考察しなおす」破も離も必要なんじゃないかと思うのですが、そのあたりどんなもんなんですかね?

*1:話はしたけど理解してはいただけませんでしたねぇ。その後どうなったんでしょうか? まぁどうでもよいのですが。