トップページ > プログラム > 2016年12月30日 > 66Kkldk7

書き込み順位&時間帯一覧

1 位/163 ID中時間01234567891011121314151617181920212223Total
書き込み数00070000000003010360000020



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
テストしにくいコードをテストする方法教えて下さい

書き込みレス一覧

スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
802 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:10:12.47 ID:66Kkldk7
>>801
> ユーザがいない、パスワードが誤っている、など。

ログイン処理に関して言えば、それはやったらだめ
ユーザー登録されているかどうかがわかるため
攻撃の糸口になる
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
803 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:11:31.16 ID:66Kkldk7
そもそもこういうありふれた処理は
フレームワークでやり方が用意されているので
それに従えばいい。

フレームワークを使っていないならば使うべきだ
自分で作るようなところじゃない
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
804 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:12:56.73 ID:66Kkldk7
テストを意識しているようだが、メッセージのテストをするのは
殆どの場合間違い。例外はあるだろうが思いつかないレベル。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
805 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:16:03.38 ID:66Kkldk7
> ログイン関数にユーザとパスワードを渡すと、ログインできればtrueを返しますが、falseのときは、メッセージも返したいです。

戻り値は返さなくていい。ログイン関数を実行してログインできればそのまま続行。
ログインできなければ例外を発生させればいい。
必要ならメッセージを返すことだってできる
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
806 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:17:48.62 ID:66Kkldk7
> こういう関数の場合、戻り値はbooleanでなくて、数値(コード)などを利用した方がいいのでしょうか?

エラーの種類がとてつもなくおおくない限りエラーコードは使わない。
例外クラスを作ればいい。戻り値を使わないことはさっき書いた
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
807 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:19:54.94 ID:66Kkldk7
> また、メッセージに対応する処理をどこに持たせればいいのか、スマートに設計できません。

共通部分。例外的な処理をしたい場合がない限り
共通の場所に一つだけ書けばいい。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
808 :デフォルトの名無しさん[sage]:2016/12/30(金) 03:21:04.07 ID:66Kkldk7
> 関数内でビューを更新すると

ビューが何かわからんが、ログイン関数で更新することはない
テストしにくいコードをテストする方法教えて下さい
864 :デフォルトの名無しさん[sage]:2016/12/30(金) 13:04:19.38 ID:66Kkldk7
これを過剰だと思うのは
理解してない証拠
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
815 :デフォルトの名無しさん[sage]:2016/12/30(金) 13:05:13.88 ID:66Kkldk7
>>810
> セキュリティ上の懸念から

意味わからん。ソースコード公開すれば
守るものなんてなにもない。
テストしにくいコードをテストする方法教えて下さい
866 :デフォルトの名無しさん[sage]:2016/12/30(金) 13:17:22.62 ID:66Kkldk7
まあどちらにしろ何も言えないっていうのは
そういことだとしか思われるだけ
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
824 :デフォルトの名無しさん[sage]:2016/12/30(金) 15:54:55.99 ID:66Kkldk7
>>823
なんだセクハラの話じゃないのか
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
828 :デフォルトの名無しさん[sage]:2016/12/30(金) 17:00:16.23 ID:66Kkldk7
> 本当の例外と区別する必要があるから。

そんなもん例外の方で区別しろよw

> DBに繋げないからログインできないのは例外だけど、
DBにつなげますか?ってメソッドで繋げないのは正常系の範囲だろ。

> 認証に失敗するのは、正常系の範囲。
誰が認証するなんて言ったんだよw

俺が言ったのはログインするという処理。
ログインできないのは何が原因であれ正常系の範囲外だ。


重要なのは処理(関数)の名前だって気づけ
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
829 :デフォルトの名無しさん[sage]:2016/12/30(金) 17:01:50.01 ID:66Kkldk7
何が例外になるかは、関数の名前で決まるって
わかってないやつ多いよなw
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
837 :デフォルトの名無しさん[sage]:2016/12/30(金) 17:49:48.77 ID:66Kkldk7
>>831
> DBにつなげますか、で繋げなかったのは、もうそれ以上アプリもユーザもやりようがない。

やりようがないわけじゃないが?
別のDBにつなぎ変えることだってできるだろ。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
838 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:00:15.36 ID:66Kkldk7
phpadminやmysqlworkbenchのようなDB管理ソフトでは
DBに接続できなかったらその旨をページやダイアログに表示して
再接続や別のDBに変更することができる。

結局のところ例外が起きたとき、やりようがあるかどうかは
それがどういうアプリであるかよにって違うわけで、
「やりよう」を基準に例外にするかどうかを決めるのは明らかに間違い。

名は体を表わすの言葉通り、関数の名前というのは体、つまり処理を表すので
その処理の内容によって何が正常系かが決まるんだよ。

例えば.NETにある文字列を数値に変換するメソッド
Int32.Parseというのがあるが、これは「パースする」という名前の処理だから
パースができないならば例外。だけど似たようなことをするTryParseというメソッドがある。
こっちは「パースしてみる」という名前だからパースできた(true) または
パースできなかった(false)を返す。

このように名前が重要になっている。

HTTPの話も出ているが、それがHTTPのリクエストを発行するというメソッドであれば
レスポンスコードが4xxでも5xxでも例外ではないが、
それがHTTPリクエストベースのウェブAPIであれば、4xxや5xxが帰ってきたときに例外にしてよい。
その場合はウェブAPIとして相応しい名前を持った関数になっていることだろう。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
839 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:08:43.03 ID:66Kkldk7
Railsでも名前によって例外にするかどうかが変わっている。

例えばモデルのsaveメソッドは保存できない場合にfalseを返すが、
ビックリマーク付きのsave!メソッドは、保存できない場合に
例外ActiveRecord::RecordInvalidを発生させる
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
841 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:14:50.84 ID:66Kkldk7
>>840
俺も議論したいわけじゃないから具体的には書かないが
お前が間違っている。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
844 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:22:44.43 ID:66Kkldk7
設計が下手な人はインターフェースではなくて
実装で決めてしまうことが多い。

「DBにつなげますか」というのも実装。
DBであるという実装で、例外にするかどうかを決めてしまっている。

HTTPレスポンスコードも同じだ。実装の内部でHTTPを使っているから
例外にすべきではないという考え。

馬鹿馬鹿しい。

どこに接続しようがconnectはconnect。実装がどうなっているかは関係ない。
connectできなければそれは例外。関数の名前で決まる。

connect内部でHTTPリクエストに変換して通信しているかもしれないが、
内部の実装がHTTPだからという理由でインターフェースを変えたりはしない。

何を例外にするかは処理の内容で決めるものだし、その処理の内容は
関数の名前に反映される。
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
845 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:26:30.68 ID:66Kkldk7
>>842
> どっちの用途に使われるのか分からないログイン用ライブラリは成功、失敗、例外

ログイン用ライブラリとかいうから話が噛み合わない

ログイン用ライブラリにはいろんなメソッドがある。
そのメソッドの名前で例外にすべきかどうかが決まる。

ログイン用ライブラリという言い方では単なるメソッドの集まりでしかないので
それでどちらにするかを決めることはできない
スレ立てるまでもない質問はここで 144匹目 [無断転載禁止]©2ch.net
847 :デフォルトの名無しさん[sage]:2016/12/30(金) 18:27:55.51 ID:66Kkldk7
>>842
> 人に入力させるログインシステムは入力ミス前提だから

例外 もしくは 戻り値 を返すのは関数(メソッド)であって
システムではない。今はシステムの話はしていない。

例外を返すシステムってなんだそりゃ?w
意味がわからんわw


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。