X



オブジェクト指向システムの設計 174 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0480デフォルトの名無しさん
垢版 |
2017/10/13(金) 04:36:24.84ID:zVcBlnUR
>>476
既存のフレームワーク使わずに自作する方が工数膨らむに決まってんだろ
カプコンレベルじゃないとスキル的にも厳しい
0481デフォルトの名無しさん
垢版 |
2017/10/13(金) 04:37:49.67ID:zVcBlnUR
ごめん勘違い
工数の膨らみ方が半端なさ過ぎて非現実的ってのが言いたかった
0482デフォルトの名無しさん
垢版 |
2017/10/13(金) 04:40:34.82ID:qOElJcq/
ひとまず使って組んで元の処理コピーして置き換えちゃえばいいんちゃう?
バリデーションのソースってあんでしょ?
0486デフォルトの名無しさん
垢版 |
2017/10/13(金) 16:33:32.34ID:kRlRrFWL
ごめん、何言ってんだかよくわかんないんだけど、
まず、>>468のバリデーションって、一体何に対するバリデーションの話してるの?
0487デフォルトの名無しさん
垢版 |
2017/10/13(金) 23:02:45.05ID:6pOkahl4
if (!validateRequired("#foo")) {
var msgFormat = getResource("error.required");
var label = getLabel("#foo");
addMessage(msgFormat, label);
addCss("#foo", "input-error");
}
以下100項目繰り返し

これ以上簡潔で保守性の高いバリデーションが存在しない件
OOPは物事を無駄に複雑化するばかりで役に立たん
0488デフォルトの名無しさん
垢版 |
2017/10/13(金) 23:14:22.48ID:s0+Jkp8l
>>487
バリデーションとメッセージとUIを一緒くたにするな
どこが保守性高いんだか、見づらいだけだろ
0492デフォルトの名無しさん
垢版 |
2017/10/13(金) 23:31:13.18ID:6pOkahl4
御託はいいからコード書いてみれば?
俺のコードより明確で保守性の高いコードをかけるとは思えんが
0493デフォルトの名無しさん
垢版 |
2017/10/13(金) 23:36:42.10ID:pm2E02lv
こーゆー上から目線なやつは自分の思い描くもの以外は全部クソって発想なのでめんどくさい
0497デフォルトの名無しさん
垢版 |
2017/10/14(土) 07:25:19.71ID:SVCVJk+z
バリデーション処理はexcel表から生成するものだよ
素人は手書きするらしいけどね
プロはこんなめんどくさいコードは書かない
0499デフォルトの名無しさん
垢版 |
2017/10/14(土) 10:58:40.12ID:SVCVJk+z
>>498
簡単だよ
|画面ID|セレクタ|コマンド名|ルール|
の一覧表をVBAマクロのループで回してjavascriptのコードを生成してjsフォルダに置く
それだけだ
うちの会社では20画面程度のシステムを扱うことが多いけど、このマクロのおかげで全画面の検証処理の実装が1人日でできてしまう
一覧性も高くそのまま仕様書やテストケースにも使える優れものだ
0500デフォルトの名無しさん
垢版 |
2017/10/14(土) 11:22:11.10ID:K4XROtS+
コピペプログラマは余計なコードを増やしてくれるな

foreach(validate as entry){
if (!validateRequired(entry.name)) {
var msgFormat = getResource(entry.resource);
var label = getLabel(entry.name);
addMessage(msgFormat, label);
addCss(entry.name, entry.clazz);
}
}

簡単に100分の1になるだろ
validateもプログラムからデータにしたら保守性あがるだろ
Modelからvalidateを収集するようにしてビジネスロジックを集約してもいいけど
今更そこまで設計変えるのは愚策か
0502デフォルトの名無しさん
垢版 |
2017/10/14(土) 11:44:12.14ID:XRdStdss
お客様がソース読むのかよ w
条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ
0503デフォルトの名無しさん
垢版 |
2017/10/14(土) 11:47:29.29ID:SVCVJk+z
結局コード生成するんじゃないかwww
なら最初からコード生成する前提で余計な手書きコードは書かない方がいい
プログラミングの基本すらわかってないのかよ
0506デフォルトの名無しさん
垢版 |
2017/10/14(土) 12:51:39.31ID:6KISst0f
>>502
> 条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ

発想が逆。YAML形式などで条件を書いて
必要ならばExcelに変換する。
Excelなんてサイズが無駄に多すぎて差分の比較もできないから
バージョン管理は事実上無理だろ
0507デフォルトの名無しさん
垢版 |
2017/10/14(土) 12:56:11.86ID:6KISst0f
YAML形式の何が良いかというとシンプルで見やすいから
お客様が直接読み書きできるってことだな
下手なCSVファイルよりもメンテナンス性が良い
0509デフォルトの名無しさん
垢版 |
2017/10/14(土) 13:55:47.42ID:2Glba8SI
Excelでも管理できてるなら別にいいと思うぞ
客や開発メンバーのリテラシーレベルに合ってるなら
無理に違うフォーマットを強要する必要はない
openxmlとか使えば差分比較だけならできる

むしろルールと処理を密結合させても平気な神経のほうが理解できない
そのうえプロを自称してドヤるww
0510デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:10:09.58ID:6KISst0f
>>509
客にExcelを "ルール通りに" 使わせるという
リテラシーレベルをもとめるな

勝手にフォーマットを変える、勝手にセルを結合する。
どこからかコピペした結果おかしくなって直さない
追加分とかいって差分を送りました。そっちで結合してください
とか、毎回人手で対応しなきゃならない作業が発生するぞ。
こっちで決めた使い方のルールを守ってくれやしない
0511デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:11:17.22ID:6KISst0f
> openxmlとか使えば差分比較だけならできる
むり、見た目同じように見えても、
レイアウト属性など関係ない情報の
大量の差分までできて管理できない
0512デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:12:50.65ID:2Glba8SI
>>511
属性情報は無視してdiff出せるよ
色変えたとか罫線追加したとかそのレベルの差分確認したいとなると
専用ツール入れないと実用レベルでは使えない
0513デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:15:37.80ID:NZcmE+Ju
ヴァリデーションフレームワークってどれも中途半端だよな
ちょっと複雑なヴァリデーションをしようとすると適用不能になる
しょうがないからカスタムコードを書くことになるんだけどフレームワークとケンカし始めるからフレームワークは規約で禁止って流れになる
日本の厳しい要件についてこれる柔軟性の高いフレームワークは無いものか
0514デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:16:08.20ID:2Glba8SI
>>510
その辺は上の自称プロさんならVBA使ってルール守らせるExcel作るだろ
俺は別にExcel推奨したいわけじゃないぞ
0515デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:16:14.83ID:XRdStdss
>>506
意味わからん
YAMLで書ける客がどれだけいるんだよ w
そもそも客がYAMLで書けるならExcelに変換なんて要らん、そのままソースに変換するなりすればいい
要件によっては実行時にそのまま読み込んでもいいかも知れんし
まあ>>500程度ならcsvとかで充分だと思うが
0516デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:18:15.77ID:XRdStdss
>>510
> とか、毎回人手で対応しなきゃならない作業が発生するぞ。
どんだけ低レベルの客と付き合ってるんだよ w
0517デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:22:34.78ID:6KISst0f
>>512
例えばこの例だと行を一行追加して、A2にあったWorldが
A3に変わった時の差分はこんなふうに表示される
http://blog.modd.com/entry/2016/01/26/125206

diff -u a.txt b.txt
--- a.txt 2017-10-14 14:16:59.481494825 +0900
+++ b.txt 2017-10-14 14:17:20.601528128 +0900
@@ -5,6 +5,12 @@
</row>
<row r="2">
<c r="A2" t="str">
+ <v>OOXML</v>
+ </c>
+</row>
+<row r="3">
+ <c r="A3" t="str">
<v>World</v>
</c>
</row>

Worldがもともとrow r="2"、c r="A3" だったわけだが、たった一行挿入することで、
2行目以下の、"全ての行データに対して" このようにrowとcが変化するわけだよ。
それで差分を管理できるわけ無いだろ。
0518デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:24:44.57ID:6KISst0f
>>515
> YAMLで書ける客がどれだけいるんだよ w

こっちでこんな感じで書いてくださいっていうだけ。
それはExcelと同じ。

違うのは、Excelでは条件を指定した所で
見えない情報(フォーマット情報など)が
大量に埋め込まれるということ。
そしてその見えない情報を正しく修正するのが大変だということ
0519デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:26:09.55ID:6KISst0f
>>516
> どんだけ低レベルの客と付き合ってるんだよ w

逆。客のレベルがExcelを無駄に使えるから
セルの結合とか色を変えたりしてくる。
Excelはできることが多すぎるんだよ。
余計なことをなんでもできてしまう。
0520デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:28:15.75ID:6KISst0f
>>513
> ちょっと複雑なヴァリデーションをしようとすると適用不能になる

普通はちょっと複雑なバリデーションを書くための方法がフレームワークに用意されてる。

それに、ちょっと複雑なところだけ別にやればいいだけ。

100個のうち1個のマイナーケースに対応できないから、
100個すべてめんどくさい方法で作りましたとかアホでしか無い。
0521デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:30:01.79ID:NZcmE+Ju
>>520
日本の業務アプリを甘く見過ぎだろ
カスタムコード書きまくらないと対応できねえよ
アホみたいにシンプルなUIしか書かなくてもいいWeb屋はスキル要らないし気楽でいいよな
0523デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:35:49.60ID:6KISst0f
例えば郵便番号のバリデーションが
カスタムコードとか言いそうで笑えるw

そして郵便番号を使うたびに
同じバリデーションをコピペしてるんだろうな。

普通は関数にしてフレームワークに登録すれば終わり
あとは同じバリデーションを使いまわしできる。
0524デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:40:00.04ID:6KISst0f
あぁ、当たり前だけど範囲チェックや型チェックや正規表現チェックとか
単純なものだけではなく、カスタムバリデーションや条件付きバリデーションなんかも
フレームワークの基本機能の1つだと先に言っておこう
0525デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:45:10.18ID:XRdStdss
>>518-519
> こっちでこんな感じで書いてくださいっていうだけ。
えっ?
YAMLの書き方から教えるのかよ...
Excelでフォーマット守れって言うこともできない客にYAML書けるとか無職の妄想乙 w
0526デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:46:32.49ID:6KISst0f
日本の業務アプリを作っているところがアホなのは、
バリデーションが正しく機能しているかは
アプリを実行して画面からぽちぽち実際と同じ使い方をして
検証していることなんだよな。同じ内容のバリデーションであっても
項目ごとに検証する。それがテスト時間を無意味に増やしてしまっている。

本来はバリデーションのテストは種類ごとに1つ(すごく当たり前だがw)
そして、画面の項目ごとに、想定しているバリデーション名が
設定されているかを設定ファイルを見て確認するだけ。
実際に動かしてテストはしない。
0527デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:47:12.46ID:2Glba8SI
>>517
試したけど俺の環境では↓こうなるよ
diffだけなら十分実用レベル

$git diff
diff --git a/book.xlsx b/book.xlsx
index c75fc9a..6215aa2 100644
--- a/book.xlsx
+++ b/book.xlsx
@@ -1,5 +1,6 @@
Sheet1
Hello
+ OOXML
World
0528デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:50:00.76ID:6KISst0f
>>525
> YAMLの書き方から教えるのかよ...

YAMLの書き方はExcelよりも簡単だよ。
Excelは知らない人が使いこなすためには
数週間とか数カ月かかるが、

YAMLだとフォーマット用意して、
これと同じように書いてくださいで説明終わり。

Excelでフォーマットを守れないのは、
これと同じように書いてくださいと言っても、使い方が難しいから。
俺の母親は、文字の自動補間機能のせいで「1」と入力しようと
しても「10」と補完されてしまって困っていたな。
0530デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:53:33.13ID:6KISst0f
>>527
じゃあ今度はある程度データを入れて、同じ内容のセルを結合する前後で
ためしてみそれがどう見えるかを確認したら絶望することになるから
0531デフォルトの名無しさん
垢版 |
2017/10/14(土) 14:56:35.11ID:6KISst0f
ちなみに補足しておくと、>>529はxlsxを直接比較しているのではなく
xlsxをテキストに変換してから比較している。
その時にフォーマット情報などいろいろ抜け落ちる。

だから「取り消し線のところは無視してください。」なんてのはわからない。
このようにExcelはなんでもできてしまうから、
重要な情報が抜け落ちる所に書かれてあった時に比較できない。
0532デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:07:27.23ID:XRdStdss
>>528
Excelの使い方が難しい?
YAMLがきちんと書けてExcel使えない奴なんて見たことないけどな
お前のおかんはYAML書けるのか? w
0533デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:08:18.32ID:NTbBehto
>>526
俺はやるべきだと思うなぁ
だって外人のアプリってそのせいなのかどうなのか知らんけど
よく動いてないじゃんw
0535デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:10:17.11ID:NTbBehto
xmlはプログラマしか編集できない上に
ファイルがでかくなると読み込み速度ヤバイので駄目だよ
0536デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:20:54.33ID:IPoqHaAU
俺が昨日書いた検証処理の一部
実際にはこれの数十倍の検証ルールがあると考えてほしい
フレームワークで簡単にできるなら教えてほしいおねがいします

webアプリ
テーブルをバリデーションする

列は4つでそれぞれinputを持ってる
typeは順に「checkbox, text, text, text」

検索でバックエンドから取ってきたデータがこのテーブルに表示される
これを手入力で編集してバックエンドに保存する
再検索できるが検索時にはバリデーションしなくてよい
保存するときはバリデーションを実行する

メッセージはローカライズすること
すべてのテキストリソースはバックエンドで管理されている
0537デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:21:29.07ID:IPoqHaAU
1列目のcheckboxがOFFの行はバリデーションしなくていい
2〜4列目のtextがすべて未入力の行はバリデーションしなくていい

2, 3列目が空白の場合エラー
2, 3列目が整数でない場合エラー
2, 3列目の合計値が1000を超えたらエラー

1列目のcheckboxがONの行の2, 3列目の合計値が10000を超えたらエラー

4列目はオプション
10文字以上の場合エラー
入力された文字列がバックエンドに登録されていない場合エラー

エラーメッセージは重複を排除して昇順に並び替えて所定の ul の子要素として追加する

エラーがあった入力項目は背景色を赤くする
同じ行で1つでもエラーがあった行は罫線を赤くする
0538デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:22:07.10ID:6KISst0f
>>533
> だって外人のアプリってそのせいなのかどうなのか知らんけど
> よく動いてないじゃんw

外人のアプリって何?Windows?Linux?MacOS?
0540デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:51:27.37ID:6KISst0f
>>537
どうでもいいけど、列目〜とか言って時点で、画面と密結合してんなーとしか思えんなw

列があれば行もあるんだろうけど、一行単位で処理してるようだから、
一行が、一クラスの一インスタンスと考えればよいだろう
1000超えたらエラーなのか10000超えたらエラーなのか分からんが。

画面表示周りにビューの仕事でこれはバリデーションではない。
バリデーション結果オブジェクトを見てビューで表示さればいいだけ(何度も言わせないように)

長くなったのでコードは次のレスに書く
0541デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:51:34.74ID:6KISst0f
class Row
 include ActiveModel::Validations

 def col1_condition; end
 def col2_value; end
 def col3_value; end
 def col4_text; end

 def condition;
  col1_condition && col2_value.present? && col3_value.present? && col4_text.present?
 end
 def col2_plus_col3_number
  col2_value + col3_value
 end
 // ↑ここまでは単なるクラス定義
 //↓ここ以下がバリデーション

 validates :col2_value numericality: true, presence: true, if condition
 validates :col3_value numericality: true, presence: true, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 1000, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 10000, if condition

 validates :col4_text; maximun: 10, if condition
 validate :col4_registered

 def col4_registered
  // 入力された文字列がバックエンドに登録されていない場合エラー
 end
end
0542デフォルトの名無しさん
垢版 |
2017/10/14(土) 15:53:04.43ID:6KISst0f
× validate :col4_registered
○ validate :col4_registered, if: condition

っていうか全部 if の後の: 付け忘れてたw
0543デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:04:41.69ID:2Glba8SI
>>531
だからそれは意図して属性情報は差分比較しないようにしてるからじゃん。。
なんなんその言いがかり

セルの結合もデータ的に何を意味してるのかVBA使うやつなら当然知ってるし
データとして使うExcelシートなら書式設定は変更されないようにロックするだろ
その辺のリテラシがないならExcel使うってのは選択肢にはならないわな
0544デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:09:11.95ID:6KISst0f
>>543
すべての属性情報が無視していいとは限らないからね。
属性情報として重要な事が書かれているかもしれない。
そういう無視して良いのがないかわからないのがExcelの欠点の1つ
Excelになれている人ほど、余計な工夫をしてくる。
0545デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:12:09.17ID:IPoqHaAU
>>541
これはなんの言語ですか?
JavaScriptだとどうなるのでしょうか?
10000を超えないのは複数の行について合計した時の話です
メッセージやCSSの処理はどうすればいいでしょうか?
0546デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:23:07.56ID:6KISst0f
>>545
Ruby & Rails

JavaScriptはしらん。けど大差ないものは作れるだろ
文法上の制約があるとしてんもこんなふうになる程度

validates("col2_value", {numericality: true, presence: true, if: "condition"})

> 10000を超えないのは複数の行について合計した時の話です
一行ごとに保存できるのであれば、保存する時に
この一行を保存するときに10000を超えるかどうかを調べればいい

一行ごとに保存できない、つまりまとめて保存するならば、
一行に相当するオブジェクトに含まれる配列として
テーブル全体を持っておき、そのテーブルの数値の合計を調べれば良い。

> メッセージやCSSの処理はどうすればいいでしょうか?
んなもん、バリデーション結果を返して、そこに含まれるerrorsを
画面に表示すればいいだけ。ローカライゼーションは別の話。
0547デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:32:34.19ID:IPoqHaAU
>>546
なるほど
なんとなくわかりかけてきました

肝心のエラー情報はどうやって、どのような形式で取得しますか?
検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
0548デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:37:58.88ID:6KISst0f
> 肝心のエラー情報はどうやって、どのような形式で取得しますか?
フレームワーク次第なんだんだからそのやり方に従えばいい

> 検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
似たようなもの=同じではない=違うもの

違うなら別々に用意しなければいけないし、
100%まったく同じならば、使い回せばいい。
一部が全く同じならば、同じ部分だけつかいまわせるように切り出せばいい

絶対にやってはいけないのは、違うところがあるのに
似ているからという理由だけで違うものを使いまわすこと
そんなことをするとある修正が全く無関係な所に影響を及ぼしてしまう。

異なるなら別のものを作るのは当たり前の話だ。
0550デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:45:47.95ID:6KISst0f
あとなぁ、コピペはいけないってことの意味を勘違いしてるやつが多いんだよな。

単語、文字列をコピペしたらいけない。ファイルをコピペしたら
いけないって勘違いしてる。

コピペしたらいけないのは処理だってーの。
処理はテストするものが定義はテストする意味はない。
定義でするべきなのはテストではなくて確認
確認は目視でもOKなんだよ。

バリデーションなんてほぼ定義にできてしまうのだから
テストする項目にはならない。確認する項目。
だからYAMLに分離して、技術者じゃなくても確認できるようにしておけば良いんだ。
0552デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:47:38.90ID:6KISst0f
>>549
問題はExcelには>>500のデータ以外の情報も自由に入れられてしまうところなんだよ。
そしてそれがわかりづらい。
0553デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:49:56.83ID:6KISst0f
>>551
RubyじゃなくてRailsな。バリデーションはRailsというフレームワークの一機能
バリデーション結果のオブジェクトの中に
errosってのがあってそこに項目ごとにエラーメッセージが入ってる。
またバリデーション結果のオブジェクトにはvalid?、invalid?メソッドがあって
全体がバリデーションでOKだったかどうかもわかる。
0554デフォルトの名無しさん
垢版 |
2017/10/14(土) 16:55:23.66ID:IPoqHaAU
>>553
どの項目でエラーが出たかはわかりませんか?
背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
ここも粗結合にしたまま対応できるんでしょうか?
0555デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:01:53.89ID:2Glba8SI
>>541
この場合のcheckboxは更新対象を示すフラグっぽいから
2~4列目のモデルの要素とは別にしたほうがいいんじゃないかな

ONになってる行のコレクション対してバリデーションすればいいので
if conditionは全部消せる
0556デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:02:08.30ID:6KISst0f
>>554
だからerrorsオブジェクトの中に項目ごとにエラーが入ってるって言ったろ

> 背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
いらねーよ。

どうせエラー画面がでたら、エラーが出たその項目の値を表示するだろ?
その項目のすぐ下にでもエラー情報だせばいいだろ。

あ?id? エラー情報の表示にidなんていらねーからな。
まさかと思うが、CSSに全項目書いてたりしないよな。
それならclass使え。アホらしいから
0557デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:06:44.40ID:6KISst0f
>>555
そこらへんはどうでもいいやw
重要なのはこの程度でカスタムコード書きまくらないと対応できないとか
思っていたことがはっきりしたってだけ

で、俺の意見はここからさらに先で、Railsのバリデーションコード
あの程度の情報量であれば、YAMLに簡単に外だしできるので、
外出して、客にもレビュー可能にして、価値の低いテストを減らしたい。
YAMLにすればフロントエンド側(JavaScript)でも再利用できるだろうし。
なんでもかんでもクラスに定義するのが良いとは思わないな。
0558デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:11:55.12ID:ipiotHZI
その先はないので程々にした方がいい
設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて
世界中でこれは使い物にならんと判定されたものだよ
0559デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:15:32.80ID:ipiotHZI
バリデーションすなわち入力検証をプレゼンテーションから切り離して考えるのもバカバカしい
入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
ドメインモデルに入力検証をやらせるのは愚かとしか言いようがない
0560デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:16:00.23ID:6KISst0f
> 設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて

それはXMLが失敗の原因だった。
XMLにはタグや属性という技術者しか知らないものが
あるからだめだったんだよ。
0561デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:17:14.17ID:6KISst0f
>>559
> 入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
YAMLにすることでそれも実現できる

バリデーションは、プレゼンテーションだけのものではない
プレゼンテーションでもドメインモデルでも使われるものだ
0562デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:20:06.76ID:6KISst0f
更に言うならば、バリデーションはフレームワークではなく
言語仕様に組み込むべきものだよ。
本質的にはD言語の契約プログラミングと同じものなんだから
0563デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:21:48.23ID:ipiotHZI
>>560
違う

モデル定義とバリデーション定義が離れすぎていること
コンパイルできないから開発環境の恩恵をうまく得られないこと
バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること

これらが問題点
0564デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:24:16.70ID:6KISst0f
>>563
> バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること

あんたはバリデーション処理とバリデーション定義をごっちゃにしてる。
バリデーション処理は動くコードで書くが、
バリデーション定義は動くコードではない。

JavaのXMLなんかも動くコードではないから
これは定義であり、定義の内容をJavaやC#で書く意味はない。
だってただのデータだぞ?ハッシュで持たせればいい程度の情報。
0565デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:25:05.23ID:S4q9ZUfo
>>559
俺もその意見に賛成かなぁ

画面が変わったら変わった画面用のチェックが必要になってる気がするわ
0566デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:25:21.74ID:ipiotHZI
>>561
違う

プレゼンテーションレイヤではオブジェクトが不正な状態を受け入れることが前提
不正な状態を検知する処理がバリデーション

ドメインレイヤではオブジェクトは不正な状態は受け入れない
プロパティの不正な値をセットしようとした瞬間に例外
メソッドに不正な引数を与えた瞬間に例外
これはバリデーションではない
ドメインレイヤでは契約を使う
0567デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:25:55.08ID:6KISst0f
>>541の例で言えば

 validates :col2_value numericality: true, presence: true, if condition
 validates :col3_value numericality: true, presence: true, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 1000, if condition
 validates :col2_plus_col3_number less_than_or_equal_to: 10000, if condition

 validates :col4_text; maximun: 10, if condition
 validate :col4_registered

この部分がバリデーション定義。
簡単にYAMLにできるし、客が検証したい部分でも有る。

numericalityの内容とかconditionの内容がバリデーション処理(の一部)
0568デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:27:05.32ID:6KISst0f
>>566
> ドメインレイヤではオブジェクトは不正な状態は受け入れない
> プロパティの不正な値をセットしようとした瞬間に例外
> メソッドに不正な引数を与えた瞬間に例外
> これはバリデーションではない

バリデーションに引っかかった結果をどう表示するか?が
プレゼンテーションでやるべきこと。

バリデーションそのものは使いまわすことができる。
0570デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:28:02.59ID:ipiotHZI
>>564
それはあなただけが感じる特殊な感覚だよ
世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった
XMLよりYAMLの方が多少マシという点は認めるが上記の手法に比べればどんぐりのせくらべといったところだ
0571デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:28:38.29ID:6KISst0f
>>570
> 世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった

設定ファイルを捨ててYAMLにしたの間違いだろw
0573デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:30:30.98ID:S4q9ZUfo
お前ら、喧嘩するな
どこに持とうがチェック項目は増えても減ってもいないんだぜ

だったら一番やりやすい画面かな
0574デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:32:16.56ID:6KISst0f
>>573
いや増えてる。画面でやると画面ごとにバリデーション処理が増えてしまう。
だから数を減らすにはより中心であるモデルで行う必要がある。
0575デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:32:52.58ID:S4q9ZUfo
ファイルに外だししたからチェックしなくていいですなんて
んなわけねぇだろ

今時エロ本の竿役だってそんなこと言わねぇよ
0577デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:35:14.23ID:ipiotHZI
>>572
JavaのBean ValidationやC#のDataAnnotationsを調べてみればいい
モデルとバリデーション設定を分離して管理する意味がないとわかるはずだ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況