前スレ
オブジェクト指向システムの設計 172
http://mevius.2ch.net/test/read.cgi/tech/1467992113
オブジェクト指向システムの設計 173
http://mevius.2ch.net/test/read.cgi/tech/1502182334/
類似スレ
手続き型システムの設計 1
http://mevius.2ch.net/test/read.cgi/tech/1500282714
探検
オブジェクト指向システムの設計 174 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/09/26(火) 07:20:38.98ID:qu+DPehL
488デフォルトの名無しさん
2017/10/13(金) 23:14:22.48ID:s0+Jkp8l489デフォルトの名無しさん
2017/10/13(金) 23:14:50.38ID:+zTlsJiZ2017/10/13(金) 23:16:05.73ID:+zTlsJiZ
だよなー
判定と表示は分けようって最初に教わる
判定と表示は分けようって最初に教わる
491デフォルトの名無しさん
2017/10/13(金) 23:18:48.84ID:s0+Jkp8l バリデーションはYAMLで定義するのが一番だって最近気づいた
492デフォルトの名無しさん
2017/10/13(金) 23:31:13.18ID:6pOkahl4 御託はいいからコード書いてみれば?
俺のコードより明確で保守性の高いコードをかけるとは思えんが
俺のコードより明確で保守性の高いコードをかけるとは思えんが
493デフォルトの名無しさん
2017/10/13(金) 23:36:42.10ID:pm2E02lv こーゆー上から目線なやつは自分の思い描くもの以外は全部クソって発想なのでめんどくさい
494デフォルトの名無しさん
2017/10/13(金) 23:38:06.15ID:6pOkahl4 そもそも俺のコードは判定と表示が綺麗に分かれてるし
495デフォルトの名無しさん
2017/10/14(土) 00:25:45.56ID:2Glba8SI 煽って教えてもらうスタイルに転向した?
496デフォルトの名無しさん
2017/10/14(土) 00:53:07.58ID:T9MbLxY+ きも
497デフォルトの名無しさん
2017/10/14(土) 07:25:19.71ID:SVCVJk+z バリデーション処理はexcel表から生成するものだよ
素人は手書きするらしいけどね
プロはこんなめんどくさいコードは書かない
素人は手書きするらしいけどね
プロはこんなめんどくさいコードは書かない
498デフォルトの名無しさん
2017/10/14(土) 09:45:45.21ID:xbyIhqN5 >>497
マジで!?どういう仕組み?
マジで!?どういう仕組み?
499デフォルトの名無しさん
2017/10/14(土) 10:58:40.12ID:SVCVJk+z >>498
簡単だよ
|画面ID|セレクタ|コマンド名|ルール|
の一覧表をVBAマクロのループで回してjavascriptのコードを生成してjsフォルダに置く
それだけだ
うちの会社では20画面程度のシステムを扱うことが多いけど、このマクロのおかげで全画面の検証処理の実装が1人日でできてしまう
一覧性も高くそのまま仕様書やテストケースにも使える優れものだ
簡単だよ
|画面ID|セレクタ|コマンド名|ルール|
の一覧表をVBAマクロのループで回してjavascriptのコードを生成してjsフォルダに置く
それだけだ
うちの会社では20画面程度のシステムを扱うことが多いけど、このマクロのおかげで全画面の検証処理の実装が1人日でできてしまう
一覧性も高くそのまま仕様書やテストケースにも使える優れものだ
500デフォルトの名無しさん
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を収集するようにしてビジネスロジックを集約してもいいけど
今更そこまで設計変えるのは愚策か
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を収集するようにしてビジネスロジックを集約してもいいけど
今更そこまで設計変えるのは愚策か
501デフォルトの名無しさん
2017/10/14(土) 11:32:55.38ID:SVCVJk+z502デフォルトの名無しさん
2017/10/14(土) 11:44:12.14ID:XRdStdss お客様がソース読むのかよ w
条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ
条件をお客様が決めるならExcelでもらって>>500のentryを生成するツールを作ればいいだけ
503デフォルトの名無しさん
2017/10/14(土) 11:47:29.29ID:SVCVJk+z 結局コード生成するんじゃないかwww
なら最初からコード生成する前提で余計な手書きコードは書かない方がいい
プログラミングの基本すらわかってないのかよ
なら最初からコード生成する前提で余計な手書きコードは書かない方がいい
プログラミングの基本すらわかってないのかよ
504デフォルトの名無しさん
2017/10/14(土) 12:02:38.48ID:2Glba8SI でた、いつもの自称プロさんw
505デフォルトの名無しさん
2017/10/14(土) 12:08:57.88ID:SVCVJk+z 自称プロってwww
ここは学生専用だったか?
ここは学生専用だったか?
506デフォルトの名無しさん
2017/10/14(土) 12:51:39.31ID:6KISst0f507デフォルトの名無しさん
2017/10/14(土) 12:56:11.86ID:6KISst0f YAML形式の何が良いかというとシンプルで見やすいから
お客様が直接読み書きできるってことだな
下手なCSVファイルよりもメンテナンス性が良い
お客様が直接読み書きできるってことだな
下手なCSVファイルよりもメンテナンス性が良い
508デフォルトの名無しさん
2017/10/14(土) 13:15:41.53ID:NTbBehto まあそのデータなら差分出したきゃ
CSVで出して比較できそうだけどな
CSVで出して比較できそうだけどな
509デフォルトの名無しさん
2017/10/14(土) 13:55:47.42ID:2Glba8SI Excelでも管理できてるなら別にいいと思うぞ
客や開発メンバーのリテラシーレベルに合ってるなら
無理に違うフォーマットを強要する必要はない
openxmlとか使えば差分比較だけならできる
むしろルールと処理を密結合させても平気な神経のほうが理解できない
そのうえプロを自称してドヤるww
客や開発メンバーのリテラシーレベルに合ってるなら
無理に違うフォーマットを強要する必要はない
openxmlとか使えば差分比較だけならできる
むしろルールと処理を密結合させても平気な神経のほうが理解できない
そのうえプロを自称してドヤるww
510デフォルトの名無しさん
2017/10/14(土) 14:10:09.58ID:6KISst0f >>509
客にExcelを "ルール通りに" 使わせるという
リテラシーレベルをもとめるな
勝手にフォーマットを変える、勝手にセルを結合する。
どこからかコピペした結果おかしくなって直さない
追加分とかいって差分を送りました。そっちで結合してください
とか、毎回人手で対応しなきゃならない作業が発生するぞ。
こっちで決めた使い方のルールを守ってくれやしない
客にExcelを "ルール通りに" 使わせるという
リテラシーレベルをもとめるな
勝手にフォーマットを変える、勝手にセルを結合する。
どこからかコピペした結果おかしくなって直さない
追加分とかいって差分を送りました。そっちで結合してください
とか、毎回人手で対応しなきゃならない作業が発生するぞ。
こっちで決めた使い方のルールを守ってくれやしない
511デフォルトの名無しさん
2017/10/14(土) 14:11:17.22ID:6KISst0f > openxmlとか使えば差分比較だけならできる
むり、見た目同じように見えても、
レイアウト属性など関係ない情報の
大量の差分までできて管理できない
むり、見た目同じように見えても、
レイアウト属性など関係ない情報の
大量の差分までできて管理できない
512デフォルトの名無しさん
2017/10/14(土) 14:12:50.65ID:2Glba8SI513デフォルトの名無しさん
2017/10/14(土) 14:15:37.80ID:NZcmE+Ju ヴァリデーションフレームワークってどれも中途半端だよな
ちょっと複雑なヴァリデーションをしようとすると適用不能になる
しょうがないからカスタムコードを書くことになるんだけどフレームワークとケンカし始めるからフレームワークは規約で禁止って流れになる
日本の厳しい要件についてこれる柔軟性の高いフレームワークは無いものか
ちょっと複雑なヴァリデーションをしようとすると適用不能になる
しょうがないからカスタムコードを書くことになるんだけどフレームワークとケンカし始めるからフレームワークは規約で禁止って流れになる
日本の厳しい要件についてこれる柔軟性の高いフレームワークは無いものか
514デフォルトの名無しさん
2017/10/14(土) 14:16:08.20ID:2Glba8SI515デフォルトの名無しさん
2017/10/14(土) 14:16:14.83ID:XRdStdss516デフォルトの名無しさん
2017/10/14(土) 14:18:15.77ID:XRdStdss517デフォルトの名無しさん
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が変化するわけだよ。
それで差分を管理できるわけ無いだろ。
例えばこの例だと行を一行追加して、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が変化するわけだよ。
それで差分を管理できるわけ無いだろ。
518デフォルトの名無しさん
2017/10/14(土) 14:24:44.57ID:6KISst0f >>515
> YAMLで書ける客がどれだけいるんだよ w
こっちでこんな感じで書いてくださいっていうだけ。
それはExcelと同じ。
違うのは、Excelでは条件を指定した所で
見えない情報(フォーマット情報など)が
大量に埋め込まれるということ。
そしてその見えない情報を正しく修正するのが大変だということ
> YAMLで書ける客がどれだけいるんだよ w
こっちでこんな感じで書いてくださいっていうだけ。
それはExcelと同じ。
違うのは、Excelでは条件を指定した所で
見えない情報(フォーマット情報など)が
大量に埋め込まれるということ。
そしてその見えない情報を正しく修正するのが大変だということ
519デフォルトの名無しさん
2017/10/14(土) 14:26:09.55ID:6KISst0f >>516
> どんだけ低レベルの客と付き合ってるんだよ w
逆。客のレベルがExcelを無駄に使えるから
セルの結合とか色を変えたりしてくる。
Excelはできることが多すぎるんだよ。
余計なことをなんでもできてしまう。
> どんだけ低レベルの客と付き合ってるんだよ w
逆。客のレベルがExcelを無駄に使えるから
セルの結合とか色を変えたりしてくる。
Excelはできることが多すぎるんだよ。
余計なことをなんでもできてしまう。
520デフォルトの名無しさん
2017/10/14(土) 14:28:15.75ID:6KISst0f >>513
> ちょっと複雑なヴァリデーションをしようとすると適用不能になる
普通はちょっと複雑なバリデーションを書くための方法がフレームワークに用意されてる。
それに、ちょっと複雑なところだけ別にやればいいだけ。
100個のうち1個のマイナーケースに対応できないから、
100個すべてめんどくさい方法で作りましたとかアホでしか無い。
> ちょっと複雑なヴァリデーションをしようとすると適用不能になる
普通はちょっと複雑なバリデーションを書くための方法がフレームワークに用意されてる。
それに、ちょっと複雑なところだけ別にやればいいだけ。
100個のうち1個のマイナーケースに対応できないから、
100個すべてめんどくさい方法で作りましたとかアホでしか無い。
521デフォルトの名無しさん
2017/10/14(土) 14:30:01.79ID:NZcmE+Ju522デフォルトの名無しさん
2017/10/14(土) 14:34:03.24ID:6KISst0f >>521
じゃあバリデーションのすべてがカスタムコードである例を教えてください
じゃあバリデーションのすべてがカスタムコードである例を教えてください
523デフォルトの名無しさん
2017/10/14(土) 14:35:49.60ID:6KISst0f 例えば郵便番号のバリデーションが
カスタムコードとか言いそうで笑えるw
そして郵便番号を使うたびに
同じバリデーションをコピペしてるんだろうな。
普通は関数にしてフレームワークに登録すれば終わり
あとは同じバリデーションを使いまわしできる。
カスタムコードとか言いそうで笑えるw
そして郵便番号を使うたびに
同じバリデーションをコピペしてるんだろうな。
普通は関数にしてフレームワークに登録すれば終わり
あとは同じバリデーションを使いまわしできる。
524デフォルトの名無しさん
2017/10/14(土) 14:40:00.04ID:6KISst0f あぁ、当たり前だけど範囲チェックや型チェックや正規表現チェックとか
単純なものだけではなく、カスタムバリデーションや条件付きバリデーションなんかも
フレームワークの基本機能の1つだと先に言っておこう
単純なものだけではなく、カスタムバリデーションや条件付きバリデーションなんかも
フレームワークの基本機能の1つだと先に言っておこう
525デフォルトの名無しさん
2017/10/14(土) 14:45:10.18ID:XRdStdss >>518-519
> こっちでこんな感じで書いてくださいっていうだけ。
えっ?
YAMLの書き方から教えるのかよ...
Excelでフォーマット守れって言うこともできない客にYAML書けるとか無職の妄想乙 w
> こっちでこんな感じで書いてくださいっていうだけ。
えっ?
YAMLの書き方から教えるのかよ...
Excelでフォーマット守れって言うこともできない客にYAML書けるとか無職の妄想乙 w
526デフォルトの名無しさん
2017/10/14(土) 14:46:32.49ID:6KISst0f 日本の業務アプリを作っているところがアホなのは、
バリデーションが正しく機能しているかは
アプリを実行して画面からぽちぽち実際と同じ使い方をして
検証していることなんだよな。同じ内容のバリデーションであっても
項目ごとに検証する。それがテスト時間を無意味に増やしてしまっている。
本来はバリデーションのテストは種類ごとに1つ(すごく当たり前だがw)
そして、画面の項目ごとに、想定しているバリデーション名が
設定されているかを設定ファイルを見て確認するだけ。
実際に動かしてテストはしない。
バリデーションが正しく機能しているかは
アプリを実行して画面からぽちぽち実際と同じ使い方をして
検証していることなんだよな。同じ内容のバリデーションであっても
項目ごとに検証する。それがテスト時間を無意味に増やしてしまっている。
本来はバリデーションのテストは種類ごとに1つ(すごく当たり前だがw)
そして、画面の項目ごとに、想定しているバリデーション名が
設定されているかを設定ファイルを見て確認するだけ。
実際に動かしてテストはしない。
527デフォルトの名無しさん
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
試したけど俺の環境では↓こうなるよ
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
528デフォルトの名無しさん
2017/10/14(土) 14:50:00.76ID:6KISst0f >>525
> YAMLの書き方から教えるのかよ...
YAMLの書き方はExcelよりも簡単だよ。
Excelは知らない人が使いこなすためには
数週間とか数カ月かかるが、
YAMLだとフォーマット用意して、
これと同じように書いてくださいで説明終わり。
Excelでフォーマットを守れないのは、
これと同じように書いてくださいと言っても、使い方が難しいから。
俺の母親は、文字の自動補間機能のせいで「1」と入力しようと
しても「10」と補完されてしまって困っていたな。
> YAMLの書き方から教えるのかよ...
YAMLの書き方はExcelよりも簡単だよ。
Excelは知らない人が使いこなすためには
数週間とか数カ月かかるが、
YAMLだとフォーマット用意して、
これと同じように書いてくださいで説明終わり。
Excelでフォーマットを守れないのは、
これと同じように書いてくださいと言っても、使い方が難しいから。
俺の母親は、文字の自動補間機能のせいで「1」と入力しようと
しても「10」と補完されてしまって困っていたな。
529デフォルトの名無しさん
2017/10/14(土) 14:52:49.20ID:2Glba8SI530デフォルトの名無しさん
2017/10/14(土) 14:53:33.13ID:6KISst0f531デフォルトの名無しさん
2017/10/14(土) 14:56:35.11ID:6KISst0f ちなみに補足しておくと、>>529はxlsxを直接比較しているのではなく
xlsxをテキストに変換してから比較している。
その時にフォーマット情報などいろいろ抜け落ちる。
だから「取り消し線のところは無視してください。」なんてのはわからない。
このようにExcelはなんでもできてしまうから、
重要な情報が抜け落ちる所に書かれてあった時に比較できない。
xlsxをテキストに変換してから比較している。
その時にフォーマット情報などいろいろ抜け落ちる。
だから「取り消し線のところは無視してください。」なんてのはわからない。
このようにExcelはなんでもできてしまうから、
重要な情報が抜け落ちる所に書かれてあった時に比較できない。
532デフォルトの名無しさん
2017/10/14(土) 15:07:27.23ID:XRdStdss533デフォルトの名無しさん
2017/10/14(土) 15:08:18.32ID:NTbBehto534デフォルトの名無しさん
2017/10/14(土) 15:08:49.27ID:XRdStdss535デフォルトの名無しさん
2017/10/14(土) 15:10:17.11ID:NTbBehto xmlはプログラマしか編集できない上に
ファイルがでかくなると読み込み速度ヤバイので駄目だよ
ファイルがでかくなると読み込み速度ヤバイので駄目だよ
536デフォルトの名無しさん
2017/10/14(土) 15:20:54.33ID:IPoqHaAU 俺が昨日書いた検証処理の一部
実際にはこれの数十倍の検証ルールがあると考えてほしい
フレームワークで簡単にできるなら教えてほしいおねがいします
webアプリ
テーブルをバリデーションする
列は4つでそれぞれinputを持ってる
typeは順に「checkbox, text, text, text」
検索でバックエンドから取ってきたデータがこのテーブルに表示される
これを手入力で編集してバックエンドに保存する
再検索できるが検索時にはバリデーションしなくてよい
保存するときはバリデーションを実行する
メッセージはローカライズすること
すべてのテキストリソースはバックエンドで管理されている
実際にはこれの数十倍の検証ルールがあると考えてほしい
フレームワークで簡単にできるなら教えてほしいおねがいします
webアプリ
テーブルをバリデーションする
列は4つでそれぞれinputを持ってる
typeは順に「checkbox, text, text, text」
検索でバックエンドから取ってきたデータがこのテーブルに表示される
これを手入力で編集してバックエンドに保存する
再検索できるが検索時にはバリデーションしなくてよい
保存するときはバリデーションを実行する
メッセージはローカライズすること
すべてのテキストリソースはバックエンドで管理されている
537デフォルトの名無しさん
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つでもエラーがあった行は罫線を赤くする
2〜4列目のtextがすべて未入力の行はバリデーションしなくていい
2, 3列目が空白の場合エラー
2, 3列目が整数でない場合エラー
2, 3列目の合計値が1000を超えたらエラー
1列目のcheckboxがONの行の2, 3列目の合計値が10000を超えたらエラー
4列目はオプション
10文字以上の場合エラー
入力された文字列がバックエンドに登録されていない場合エラー
エラーメッセージは重複を排除して昇順に並び替えて所定の ul の子要素として追加する
エラーがあった入力項目は背景色を赤くする
同じ行で1つでもエラーがあった行は罫線を赤くする
538デフォルトの名無しさん
2017/10/14(土) 15:22:07.10ID:6KISst0f539デフォルトの名無しさん
2017/10/14(土) 15:42:07.29ID:D5wME4oE OSをアプリって言う奴初めて見たw
540デフォルトの名無しさん
2017/10/14(土) 15:51:27.37ID:6KISst0f >>537
どうでもいいけど、列目〜とか言って時点で、画面と密結合してんなーとしか思えんなw
列があれば行もあるんだろうけど、一行単位で処理してるようだから、
一行が、一クラスの一インスタンスと考えればよいだろう
1000超えたらエラーなのか10000超えたらエラーなのか分からんが。
画面表示周りにビューの仕事でこれはバリデーションではない。
バリデーション結果オブジェクトを見てビューで表示さればいいだけ(何度も言わせないように)
長くなったのでコードは次のレスに書く
どうでもいいけど、列目〜とか言って時点で、画面と密結合してんなーとしか思えんなw
列があれば行もあるんだろうけど、一行単位で処理してるようだから、
一行が、一クラスの一インスタンスと考えればよいだろう
1000超えたらエラーなのか10000超えたらエラーなのか分からんが。
画面表示周りにビューの仕事でこれはバリデーションではない。
バリデーション結果オブジェクトを見てビューで表示さればいいだけ(何度も言わせないように)
長くなったのでコードは次のレスに書く
541デフォルトの名無しさん
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
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
542デフォルトの名無しさん
2017/10/14(土) 15:53:04.43ID:6KISst0f × validate :col4_registered
○ validate :col4_registered, if: condition
っていうか全部 if の後の: 付け忘れてたw
○ validate :col4_registered, if: condition
っていうか全部 if の後の: 付け忘れてたw
543デフォルトの名無しさん
2017/10/14(土) 16:04:41.69ID:2Glba8SI >>531
だからそれは意図して属性情報は差分比較しないようにしてるからじゃん。。
なんなんその言いがかり
セルの結合もデータ的に何を意味してるのかVBA使うやつなら当然知ってるし
データとして使うExcelシートなら書式設定は変更されないようにロックするだろ
その辺のリテラシがないならExcel使うってのは選択肢にはならないわな
だからそれは意図して属性情報は差分比較しないようにしてるからじゃん。。
なんなんその言いがかり
セルの結合もデータ的に何を意味してるのかVBA使うやつなら当然知ってるし
データとして使うExcelシートなら書式設定は変更されないようにロックするだろ
その辺のリテラシがないならExcel使うってのは選択肢にはならないわな
544デフォルトの名無しさん
2017/10/14(土) 16:09:11.95ID:6KISst0f >>543
すべての属性情報が無視していいとは限らないからね。
属性情報として重要な事が書かれているかもしれない。
そういう無視して良いのがないかわからないのがExcelの欠点の1つ
Excelになれている人ほど、余計な工夫をしてくる。
すべての属性情報が無視していいとは限らないからね。
属性情報として重要な事が書かれているかもしれない。
そういう無視して良いのがないかわからないのがExcelの欠点の1つ
Excelになれている人ほど、余計な工夫をしてくる。
545デフォルトの名無しさん
2017/10/14(土) 16:12:09.17ID:IPoqHaAU546デフォルトの名無しさん
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を
画面に表示すればいいだけ。ローカライゼーションは別の話。
Ruby & Rails
JavaScriptはしらん。けど大差ないものは作れるだろ
文法上の制約があるとしてんもこんなふうになる程度
validates("col2_value", {numericality: true, presence: true, if: "condition"})
> 10000を超えないのは複数の行について合計した時の話です
一行ごとに保存できるのであれば、保存する時に
この一行を保存するときに10000を超えるかどうかを調べればいい
一行ごとに保存できない、つまりまとめて保存するならば、
一行に相当するオブジェクトに含まれる配列として
テーブル全体を持っておき、そのテーブルの数値の合計を調べれば良い。
> メッセージやCSSの処理はどうすればいいでしょうか?
んなもん、バリデーション結果を返して、そこに含まれるerrorsを
画面に表示すればいいだけ。ローカライゼーションは別の話。
547デフォルトの名無しさん
2017/10/14(土) 16:32:34.19ID:IPoqHaAU >>546
なるほど
なんとなくわかりかけてきました
肝心のエラー情報はどうやって、どのような形式で取得しますか?
検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
なるほど
なんとなくわかりかけてきました
肝心のエラー情報はどうやって、どのような形式で取得しますか?
検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
548デフォルトの名無しさん
2017/10/14(土) 16:37:58.88ID:6KISst0f > 肝心のエラー情報はどうやって、どのような形式で取得しますか?
フレームワーク次第なんだんだからそのやり方に従えばいい
> 検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
似たようなもの=同じではない=違うもの
違うなら別々に用意しなければいけないし、
100%まったく同じならば、使い回せばいい。
一部が全く同じならば、同じ部分だけつかいまわせるように切り出せばいい
絶対にやってはいけないのは、違うところがあるのに
似ているからという理由だけで違うものを使いまわすこと
そんなことをするとある修正が全く無関係な所に影響を及ぼしてしまう。
異なるなら別のものを作るのは当たり前の話だ。
フレームワーク次第なんだんだからそのやり方に従えばいい
> 検索や保存など処理によって検証内容が異なる場合は似たようなクラスを2つ用意するのでしょうか?
似たようなもの=同じではない=違うもの
違うなら別々に用意しなければいけないし、
100%まったく同じならば、使い回せばいい。
一部が全く同じならば、同じ部分だけつかいまわせるように切り出せばいい
絶対にやってはいけないのは、違うところがあるのに
似ているからという理由だけで違うものを使いまわすこと
そんなことをするとある修正が全く無関係な所に影響を及ぼしてしまう。
異なるなら別のものを作るのは当たり前の話だ。
549デフォルトの名無しさん
2017/10/14(土) 16:44:22.76ID:wPdsvz2f550デフォルトの名無しさん
2017/10/14(土) 16:45:47.95ID:6KISst0f あとなぁ、コピペはいけないってことの意味を勘違いしてるやつが多いんだよな。
単語、文字列をコピペしたらいけない。ファイルをコピペしたら
いけないって勘違いしてる。
コピペしたらいけないのは処理だってーの。
処理はテストするものが定義はテストする意味はない。
定義でするべきなのはテストではなくて確認
確認は目視でもOKなんだよ。
バリデーションなんてほぼ定義にできてしまうのだから
テストする項目にはならない。確認する項目。
だからYAMLに分離して、技術者じゃなくても確認できるようにしておけば良いんだ。
単語、文字列をコピペしたらいけない。ファイルをコピペしたら
いけないって勘違いしてる。
コピペしたらいけないのは処理だってーの。
処理はテストするものが定義はテストする意味はない。
定義でするべきなのはテストではなくて確認
確認は目視でもOKなんだよ。
バリデーションなんてほぼ定義にできてしまうのだから
テストする項目にはならない。確認する項目。
だからYAMLに分離して、技術者じゃなくても確認できるようにしておけば良いんだ。
551デフォルトの名無しさん
2017/10/14(土) 16:46:45.77ID:IPoqHaAU >>548
ちなみにrubyだとバリデーション結果はどうなってるんですか?
ちなみにrubyだとバリデーション結果はどうなってるんですか?
552デフォルトの名無しさん
2017/10/14(土) 16:47:38.90ID:6KISst0f553デフォルトの名無しさん
2017/10/14(土) 16:49:56.83ID:6KISst0f >>551
RubyじゃなくてRailsな。バリデーションはRailsというフレームワークの一機能
バリデーション結果のオブジェクトの中に
errosってのがあってそこに項目ごとにエラーメッセージが入ってる。
またバリデーション結果のオブジェクトにはvalid?、invalid?メソッドがあって
全体がバリデーションでOKだったかどうかもわかる。
RubyじゃなくてRailsな。バリデーションはRailsというフレームワークの一機能
バリデーション結果のオブジェクトの中に
errosってのがあってそこに項目ごとにエラーメッセージが入ってる。
またバリデーション結果のオブジェクトにはvalid?、invalid?メソッドがあって
全体がバリデーションでOKだったかどうかもわかる。
554デフォルトの名無しさん
2017/10/14(土) 16:55:23.66ID:IPoqHaAU >>553
どの項目でエラーが出たかはわかりませんか?
背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
ここも粗結合にしたまま対応できるんでしょうか?
どの項目でエラーが出たかはわかりませんか?
背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
ここも粗結合にしたまま対応できるんでしょうか?
555デフォルトの名無しさん
2017/10/14(土) 17:01:53.89ID:2Glba8SI >>541
この場合のcheckboxは更新対象を示すフラグっぽいから
2~4列目のモデルの要素とは別にしたほうがいいんじゃないかな
ONになってる行のコレクション対してバリデーションすればいいので
if conditionは全部消せる
この場合のcheckboxは更新対象を示すフラグっぽいから
2~4列目のモデルの要素とは別にしたほうがいいんじゃないかな
ONになってる行のコレクション対してバリデーションすればいいので
if conditionは全部消せる
556デフォルトの名無しさん
2017/10/14(土) 17:02:08.30ID:6KISst0f >>554
だからerrorsオブジェクトの中に項目ごとにエラーが入ってるって言ったろ
> 背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
いらねーよ。
どうせエラー画面がでたら、エラーが出たその項目の値を表示するだろ?
その項目のすぐ下にでもエラー情報だせばいいだろ。
あ?id? エラー情報の表示にidなんていらねーからな。
まさかと思うが、CSSに全項目書いてたりしないよな。
それならclass使え。アホらしいから
だからerrorsオブジェクトの中に項目ごとにエラーが入ってるって言ったろ
> 背景色を変えるには入力項目のidとrubyオブジェクトのプロパティとのひも付けが必要だと思いますが
いらねーよ。
どうせエラー画面がでたら、エラーが出たその項目の値を表示するだろ?
その項目のすぐ下にでもエラー情報だせばいいだろ。
あ?id? エラー情報の表示にidなんていらねーからな。
まさかと思うが、CSSに全項目書いてたりしないよな。
それならclass使え。アホらしいから
557デフォルトの名無しさん
2017/10/14(土) 17:06:44.40ID:6KISst0f >>555
そこらへんはどうでもいいやw
重要なのはこの程度でカスタムコード書きまくらないと対応できないとか
思っていたことがはっきりしたってだけ
で、俺の意見はここからさらに先で、Railsのバリデーションコード
あの程度の情報量であれば、YAMLに簡単に外だしできるので、
外出して、客にもレビュー可能にして、価値の低いテストを減らしたい。
YAMLにすればフロントエンド側(JavaScript)でも再利用できるだろうし。
なんでもかんでもクラスに定義するのが良いとは思わないな。
そこらへんはどうでもいいやw
重要なのはこの程度でカスタムコード書きまくらないと対応できないとか
思っていたことがはっきりしたってだけ
で、俺の意見はここからさらに先で、Railsのバリデーションコード
あの程度の情報量であれば、YAMLに簡単に外だしできるので、
外出して、客にもレビュー可能にして、価値の低いテストを減らしたい。
YAMLにすればフロントエンド側(JavaScript)でも再利用できるだろうし。
なんでもかんでもクラスに定義するのが良いとは思わないな。
558デフォルトの名無しさん
2017/10/14(土) 17:11:55.12ID:ipiotHZI その先はないので程々にした方がいい
設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて
世界中でこれは使い物にならんと判定されたものだよ
設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて
世界中でこれは使い物にならんと判定されたものだよ
559デフォルトの名無しさん
2017/10/14(土) 17:15:32.80ID:ipiotHZI バリデーションすなわち入力検証をプレゼンテーションから切り離して考えるのもバカバカしい
入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
ドメインモデルに入力検証をやらせるのは愚かとしか言いようがない
入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
ドメインモデルに入力検証をやらせるのは愚かとしか言いようがない
560デフォルトの名無しさん
2017/10/14(土) 17:16:00.23ID:6KISst0f > 設定ファイルでバリデーションするアイデアはJavaとか他の言語が大昔にとっくに通過していて
それはXMLが失敗の原因だった。
XMLにはタグや属性という技術者しか知らないものが
あるからだめだったんだよ。
それはXMLが失敗の原因だった。
XMLにはタグや属性という技術者しか知らないものが
あるからだめだったんだよ。
561デフォルトの名無しさん
2017/10/14(土) 17:17:14.17ID:6KISst0f >>559
> 入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
YAMLにすることでそれも実現できる
バリデーションは、プレゼンテーションだけのものではない
プレゼンテーションでもドメインモデルでも使われるものだ
> 入力検証はViewあるいはViewModelに属する処理だからプレゼンテーションに入るのが正解
YAMLにすることでそれも実現できる
バリデーションは、プレゼンテーションだけのものではない
プレゼンテーションでもドメインモデルでも使われるものだ
562デフォルトの名無しさん
2017/10/14(土) 17:20:06.76ID:6KISst0f 更に言うならば、バリデーションはフレームワークではなく
言語仕様に組み込むべきものだよ。
本質的にはD言語の契約プログラミングと同じものなんだから
言語仕様に組み込むべきものだよ。
本質的にはD言語の契約プログラミングと同じものなんだから
563デフォルトの名無しさん
2017/10/14(土) 17:21:48.23ID:ipiotHZI >>560
違う
モデル定義とバリデーション定義が離れすぎていること
コンパイルできないから開発環境の恩恵をうまく得られないこと
バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること
これらが問題点
違う
モデル定義とバリデーション定義が離れすぎていること
コンパイルできないから開発環境の恩恵をうまく得られないこと
バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること
これらが問題点
564デフォルトの名無しさん
2017/10/14(土) 17:24:16.70ID:6KISst0f >>563
> バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること
あんたはバリデーション処理とバリデーション定義をごっちゃにしてる。
バリデーション処理は動くコードで書くが、
バリデーション定義は動くコードではない。
JavaのXMLなんかも動くコードではないから
これは定義であり、定義の内容をJavaやC#で書く意味はない。
だってただのデータだぞ?ハッシュで持たせればいい程度の情報。
> バリデーションを書くのは開発者であるが開発者に馴染みのある言語はXMLやYAMLではなくJavaやC#であること
あんたはバリデーション処理とバリデーション定義をごっちゃにしてる。
バリデーション処理は動くコードで書くが、
バリデーション定義は動くコードではない。
JavaのXMLなんかも動くコードではないから
これは定義であり、定義の内容をJavaやC#で書く意味はない。
だってただのデータだぞ?ハッシュで持たせればいい程度の情報。
565デフォルトの名無しさん
2017/10/14(土) 17:25:05.23ID:S4q9ZUfo566デフォルトの名無しさん
2017/10/14(土) 17:25:21.74ID:ipiotHZI >>561
違う
プレゼンテーションレイヤではオブジェクトが不正な状態を受け入れることが前提
不正な状態を検知する処理がバリデーション
ドメインレイヤではオブジェクトは不正な状態は受け入れない
プロパティの不正な値をセットしようとした瞬間に例外
メソッドに不正な引数を与えた瞬間に例外
これはバリデーションではない
ドメインレイヤでは契約を使う
違う
プレゼンテーションレイヤではオブジェクトが不正な状態を受け入れることが前提
不正な状態を検知する処理がバリデーション
ドメインレイヤではオブジェクトは不正な状態は受け入れない
プロパティの不正な値をセットしようとした瞬間に例外
メソッドに不正な引数を与えた瞬間に例外
これはバリデーションではない
ドメインレイヤでは契約を使う
567デフォルトの名無しさん
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の内容がバリデーション処理(の一部)
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の内容がバリデーション処理(の一部)
568デフォルトの名無しさん
2017/10/14(土) 17:27:05.32ID:6KISst0f >>566
> ドメインレイヤではオブジェクトは不正な状態は受け入れない
> プロパティの不正な値をセットしようとした瞬間に例外
> メソッドに不正な引数を与えた瞬間に例外
> これはバリデーションではない
バリデーションに引っかかった結果をどう表示するか?が
プレゼンテーションでやるべきこと。
バリデーションそのものは使いまわすことができる。
> ドメインレイヤではオブジェクトは不正な状態は受け入れない
> プロパティの不正な値をセットしようとした瞬間に例外
> メソッドに不正な引数を与えた瞬間に例外
> これはバリデーションではない
バリデーションに引っかかった結果をどう表示するか?が
プレゼンテーションでやるべきこと。
バリデーションそのものは使いまわすことができる。
569デフォルトの名無しさん
2017/10/14(土) 17:27:18.82ID:S4q9ZUfo >>566
ctrl+vで貼った1GBテキストとかメモリに保持すんの?
ctrl+vで貼った1GBテキストとかメモリに保持すんの?
570デフォルトの名無しさん
2017/10/14(土) 17:28:02.59ID:ipiotHZI >>564
それはあなただけが感じる特殊な感覚だよ
世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった
XMLよりYAMLの方が多少マシという点は認めるが上記の手法に比べればどんぐりのせくらべといったところだ
それはあなただけが感じる特殊な感覚だよ
世界中のプログラマは設定ファイルを捨て去り属性やアノテーションを使うようになった
XMLよりYAMLの方が多少マシという点は認めるが上記の手法に比べればどんぐりのせくらべといったところだ
571デフォルトの名無しさん
2017/10/14(土) 17:28:38.29ID:6KISst0f572デフォルトの名無しさん
2017/10/14(土) 17:29:02.43ID:6KISst0f 設定をYAMLではなくソースコードに埋め込むのを見てみたいもんだがw
573デフォルトの名無しさん
2017/10/14(土) 17:30:30.98ID:S4q9ZUfo お前ら、喧嘩するな
どこに持とうがチェック項目は増えても減ってもいないんだぜ
だったら一番やりやすい画面かな
どこに持とうがチェック項目は増えても減ってもいないんだぜ
だったら一番やりやすい画面かな
574デフォルトの名無しさん
2017/10/14(土) 17:32:16.56ID:6KISst0f575デフォルトの名無しさん
2017/10/14(土) 17:32:52.58ID:S4q9ZUfo ファイルに外だししたからチェックしなくていいですなんて
んなわけねぇだろ
今時エロ本の竿役だってそんなこと言わねぇよ
んなわけねぇだろ
今時エロ本の竿役だってそんなこと言わねぇよ
576デフォルトの名無しさん
2017/10/14(土) 17:34:49.45ID:S4q9ZUfo >>574
チェックはしなきゃ駄目だよ
チェックはしなきゃ駄目だよ
577デフォルトの名無しさん
2017/10/14(土) 17:35:14.23ID:ipiotHZI578デフォルトの名無しさん
2017/10/14(土) 17:39:42.15ID:XRdStdss579デフォルトの名無しさん
2017/10/14(土) 18:20:50.90ID:6KISst0f >>575
> ファイルに外だししたからチェックしなくていいですなんて
> んなわけねぇだろ
そんなこと言ってないよw
バリデーションという単純な部分を
外だしすると誰でもチェックできるようになるよ。
そもそもExcelでやっていたことだからね。
Excelという使いづらい形式がYAMLに変わっただけ
誰でもチェックできるってことの意味がわかったかな?
あ、YAMLに変わってプログラムからそれを
そのまま使うってところも違うか。
> ファイルに外だししたからチェックしなくていいですなんて
> んなわけねぇだろ
そんなこと言ってないよw
バリデーションという単純な部分を
外だしすると誰でもチェックできるようになるよ。
そもそもExcelでやっていたことだからね。
Excelという使いづらい形式がYAMLに変わっただけ
誰でもチェックできるってことの意味がわかったかな?
あ、YAMLに変わってプログラムからそれを
そのまま使うってところも違うか。
580デフォルトの名無しさん
2017/10/14(土) 19:06:29.37ID:GDzf5CCz YAMLが誰でも読み書きできると主張しているのはプログラマだけという事実について考える必要があるようだ
エクセルは誰でも読み書きできる
これはプログラマ以外のステークホルダーも同意している
エクセルは誰でも読み書きできる
これはプログラマ以外のステークホルダーも同意している
581デフォルトの名無しさん
2017/10/14(土) 19:35:21.74ID:LrE/Uk2a xmlはパンピーには無理
スコープなんて意識できるわけねーし
っていうか俺でも辛い
xmlを編集できるツールがそもそもねーじゃん
責任持ってお前作って配れよ
スコープなんて意識できるわけねーし
っていうか俺でも辛い
xmlを編集できるツールがそもそもねーじゃん
責任持ってお前作って配れよ
582デフォルトの名無しさん
2017/10/14(土) 21:47:43.86ID:4wM/EQmV 結局のところフレームワーク無しだとif文書きまくるのが最強ということですか?
いわゆるKISSに原則ってやつですね
いわゆるKISSに原則ってやつですね
583デフォルトの名無しさん
2017/10/14(土) 21:59:38.46ID:6KISst0f >>582
if文以外は不要
if文以外は不要
584デフォルトの名無しさん
2017/10/14(土) 22:36:04.01ID:LrE/Uk2a データからソースコード吐き出すツールでも作ったらどうか?
585デフォルトの名無しさん
2017/10/15(日) 00:42:30.20ID:RBDvyi+r データはRDBMSでもテキストでもなんでもいいだろ
DAOで抽象化しとけば後から変えられる
メンテできるものにしろ
DAOで抽象化しとけば後から変えられる
メンテできるものにしろ
586デフォルトの名無しさん
2017/10/15(日) 00:48:50.64ID:/8UsyUgn587デフォルトの名無しさん
2017/10/15(日) 18:02:34.88ID:nlQ3NzZf■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【悲報】日本人「日本が中国と戦争になったら世界中の国が応援してくれるぞ!」 [616817505]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【ほんこん悲報】吉本新喜劇の中国公演が中止に! [523957489]
