よっぽど小さいプログラムでない限り
YAMLやJSONなどを読み込んでハッシュにしたものを参照するのではなく
設定ファイルクラスを作ってアクセスするべきである
理由は拡張性や互換性を保ってシンプルに使えるようにするため
探検
設定ファイルを読み書きする時は専用のクラスを作れ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/20(日) 23:54:22.47ID:ooMVqCZ7
2017/08/21(月) 00:15:34.85ID:jpEJzG1z
-完
2017/08/21(月) 00:16:19.90ID:2fQ5BmBo
再開
2017/08/21(月) 01:01:36.37ID:7hohe37q
これは誰も反対するやついないわ
つかわざわざ自作しなくても標準でそういう機能が用意されてるか
一般的によく使われてるライブラリがあると思うぞ
つかわざわざ自作しなくても標準でそういう機能が用意されてるか
一般的によく使われてるライブラリがあると思うぞ
2017/08/21(月) 01:36:10.97ID:DtUMsypO
xmlを使ってたけど
でかくなると文字列処理だから
超おっそいぜ
でかくなると文字列処理だから
超おっそいぜ
2017/08/21(月) 01:47:39.56ID:DtUMsypO
2017/08/21(月) 01:49:20.42ID:DtUMsypO
読み込みクソ重いのに
20msに一回とか言われっと
速度ベースで考えないと駄目なときも
20msに一回とか言われっと
速度ベースで考えないと駄目なときも
2017/08/21(月) 09:34:07.48ID:2fQ5BmBo
>>4
> つかわざわざ自作しなくても標準でそういう機能が用意されてるか
> 一般的によく使われてるライブラリがあると思うぞ
いや違う。そういう話じゃない。
例えばApacheであればApache専用の設定クラスを作るということ
そして自作のMyAppであればMyAppConfigという専用のクラスを作るということ
> つかわざわざ自作しなくても標準でそういう機能が用意されてるか
> 一般的によく使われてるライブラリがあると思うぞ
いや違う。そういう話じゃない。
例えばApacheであればApache専用の設定クラスを作るということ
そして自作のMyAppであればMyAppConfigという専用のクラスを作るということ
2017/08/21(月) 10:52:50.57ID:A2JiXS2f
まんこはマジ臭い
ちんこの比じゃない
ちんこの比じゃない
2017/08/21(月) 11:09:33.97ID:LLeZ/OpM
ケースバイケースじゃん
そもそもどこに持つんだよ?
ってのと
通信設定なのかログ設定なのか
製品設定なのか表示設定なのか
ユーザ毎の設定なんてデータベースだし
あの場合はこの場合は?
ってすべてを包括できるもんはできんと思うがどうか?
そもそもどこに持つんだよ?
ってのと
通信設定なのかログ設定なのか
製品設定なのか表示設定なのか
ユーザ毎の設定なんてデータベースだし
あの場合はこの場合は?
ってすべてを包括できるもんはできんと思うがどうか?
2017/08/21(月) 12:41:30.44ID:2fQ5BmBo
2017/08/21(月) 12:48:33.17ID:2fQ5BmBo
例えば、ある設定値を取得する場合を考える。
具体的にログのファイル名とするか?
設定ファイルで設定している場合は、そのファイル名
そうでなければ /tmp/myapp.log に出力するものとする。
この時、config = YAML.load("config.yaml") みたいに
専用のクラスを作らない場合は、
log_file = config["log_file"] || DEFAULT_LOG_FILE
みたいなコードを阿智事に書かないといけなくなる
MyConfigみたいなものを作っていれば、
log_file = my_config.log_file とするだけで良くなる。
具体的にログのファイル名とするか?
設定ファイルで設定している場合は、そのファイル名
そうでなければ /tmp/myapp.log に出力するものとする。
この時、config = YAML.load("config.yaml") みたいに
専用のクラスを作らない場合は、
log_file = config["log_file"] || DEFAULT_LOG_FILE
みたいなコードを阿智事に書かないといけなくなる
MyConfigみたいなものを作っていれば、
log_file = my_config.log_file とするだけで良くなる。
2017/08/21(月) 12:51:37.97ID:2fQ5BmBo
> みたいなコードを阿智事に書かないといけなくなる
なんだこれw 「あちこち」な
なんだこれw 「あちこち」な
2017/08/21(月) 13:03:59.99ID:2fQ5BmBo
また別の話として、設定ファイルに
log_file = 任意のファイル名
という風にログファイル名が書かれている場合はログに出力するが、
何も書かれていなければ出力しないという仕様だったとする。
ある時、ファイル名は書いているが一時的に無効にしたいという要望がでたため
log_enabled = true
log_file = 任意のファイル名
以下のような仕様に変えたとする
(MySQL の general_log = 0 で無効になるのと同じような仕様だな)
この場合専用のクラスがなければあちこちで、
if log_file を if log_enabled && log_file みたいに書き換えないといけない。
だけど専用のクラスがあれば、内部で吸収できる
設定ファイルに log_enabled が書いていなくても、デフォルト値をtrueにすることなんて簡単だし
log_enabledがtrueの場合だけ、log_fileを返すようにすることで、今までと互換性を保つことができる。
それだけじゃない。設定値を返すのではなく専用の設定クラスから直接Loggerオブジェクトを
返すようにすれば、NullLogger(つまり何も出力しないログクラス)を作ることで、
if log_file 自体も無くすことができる
アプリの中にある、あらゆる "設定ファイルの解釈" を設定クラス自身にさせることで
アプリからは単純な設定として参照できるようになるんだよ
log_file = 任意のファイル名
という風にログファイル名が書かれている場合はログに出力するが、
何も書かれていなければ出力しないという仕様だったとする。
ある時、ファイル名は書いているが一時的に無効にしたいという要望がでたため
log_enabled = true
log_file = 任意のファイル名
以下のような仕様に変えたとする
(MySQL の general_log = 0 で無効になるのと同じような仕様だな)
この場合専用のクラスがなければあちこちで、
if log_file を if log_enabled && log_file みたいに書き換えないといけない。
だけど専用のクラスがあれば、内部で吸収できる
設定ファイルに log_enabled が書いていなくても、デフォルト値をtrueにすることなんて簡単だし
log_enabledがtrueの場合だけ、log_fileを返すようにすることで、今までと互換性を保つことができる。
それだけじゃない。設定値を返すのではなく専用の設定クラスから直接Loggerオブジェクトを
返すようにすれば、NullLogger(つまり何も出力しないログクラス)を作ることで、
if log_file 自体も無くすことができる
アプリの中にある、あらゆる "設定ファイルの解釈" を設定クラス自身にさせることで
アプリからは単純な設定として参照できるようになるんだよ
2017/08/21(月) 13:17:27.75ID:2fQ5BmBo
あと容易に思いつくだろうけど、
専用のクラスがあれば、設定ファイルをXMLからYAMLに変えることだって簡単にできる
単に内部のファイル形式が変わるだけで、クラスのインターフェースは変わらないからね。
それから設定ファイルの構造を変えるのも簡単になる。
例えばもともとini形式で
[DATA]
file_0_title = "ファイル0"
file_0_path = "/path/to/file0"
file_1_title = "ファイル1"
file_1_path = "/path/to/file1"
みたいなものを単純にYAML化してこんなことしちゃっても
data:
- file_0_title: ファイル0
- file_0_path: /path/to/file0
- file_1_title: ファイル1
- file_1_path: /path/to/file1
あとからこのように変えることだってできる。
data:
files:
- title: ファイル0
- path: /path/to/file0
- title: ファイル1
- path: /path/to/file1
なぜなら設定クラスのインターフェースはini形式の時代から
設定クラス内で解釈することによって、config.data.files とすることだってできるし、
互換性のために、config.data.file_0_title という参照方法を残すことだってできる。
設定値を単純にハッシュにして参照するのではなく、クラスにラップすることでこういうメリットが有るわけだよ
専用のクラスがあれば、設定ファイルをXMLからYAMLに変えることだって簡単にできる
単に内部のファイル形式が変わるだけで、クラスのインターフェースは変わらないからね。
それから設定ファイルの構造を変えるのも簡単になる。
例えばもともとini形式で
[DATA]
file_0_title = "ファイル0"
file_0_path = "/path/to/file0"
file_1_title = "ファイル1"
file_1_path = "/path/to/file1"
みたいなものを単純にYAML化してこんなことしちゃっても
data:
- file_0_title: ファイル0
- file_0_path: /path/to/file0
- file_1_title: ファイル1
- file_1_path: /path/to/file1
あとからこのように変えることだってできる。
data:
files:
- title: ファイル0
- path: /path/to/file0
- title: ファイル1
- path: /path/to/file1
なぜなら設定クラスのインターフェースはini形式の時代から
設定クラス内で解釈することによって、config.data.files とすることだってできるし、
互換性のために、config.data.file_0_title という参照方法を残すことだってできる。
設定値を単純にハッシュにして参照するのではなく、クラスにラップすることでこういうメリットが有るわけだよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か [ぐれ★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★8 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★3 [蚤の市★]
- 京都のホテル大幅値下げ 訪日中国人客、年1000万人目前で急ブレーキ [蚤の市★]
- 現場からは悲鳴、母親からは「高い」「性犯罪が怖い」の声も…高市総理がどうしても実現したい政策「ベビーシッターの利用促進」 [ぐれ★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★3 [蚤の市★]
- 議員定数削減法案、廃案へwmwmwmmwmwmwmw [834922174]
- 【悲報】男「セックスしなくなったら彼女のことだんだん許せなくなったわ」→炎上wwwwwwwwwwwwwwwwwwww [802034645]
- 【悲報】高市早苗、天皇末裔説wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww [904880432]
- 朝ご飯の時間きたあああああああああ
- 【悲報】高齢者、マルチコピー機で自分の逮捕状を印刷してしまう [394133584]
- 【悲報】ゆたぼん、事故の治療費をネットで乞食して整形代に使ってる疑惑浮上wwwwwww
