前スレ
オブジェクト指向システムの設計 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
442デフォルトの名無しさん
2017/10/09(月) 08:13:01.79ID:1ju7bjVC >>441
何が困ってるの?
何が困ってるの?
443デフォルトの名無しさん
2017/10/09(月) 08:52:42.35ID:PA3EvPtr >>441
OOPではリソースIDのような物理的な情報は隠蔽しなければならない
public interface ILowLevelMsgManager {
string GetMsg(string msgId, params object[] placeHolderArgs);
}
public interface IMsgManager {
string GetHogeMsg(); // ほげええええ
string GetFugaMsg(int num); // ふがふが{num}ふがふが
}
public class MsgManager : IMsgManager {
private ILowLevelMsgManager llmm;
public MsgManager(ILowLevelMsgManager pllmm) { llmm = pllmm; }
public string GetHogeMsg() { return llmm.GetMsg("MSG_0001"); }
public string GetFugaMsg(int num) { return llmm.GetMsg("MSG_0002", num); }
}
OOPではリソースIDのような物理的な情報は隠蔽しなければならない
public interface ILowLevelMsgManager {
string GetMsg(string msgId, params object[] placeHolderArgs);
}
public interface IMsgManager {
string GetHogeMsg(); // ほげええええ
string GetFugaMsg(int num); // ふがふが{num}ふがふが
}
public class MsgManager : IMsgManager {
private ILowLevelMsgManager llmm;
public MsgManager(ILowLevelMsgManager pllmm) { llmm = pllmm; }
public string GetHogeMsg() { return llmm.GetMsg("MSG_0001"); }
public string GetFugaMsg(int num) { return llmm.GetMsg("MSG_0002", num); }
}
444デフォルトの名無しさん
2017/10/09(月) 09:16:54.02ID:L5aecCRz >>443
それになんの意味があるのかさっぱりわからんな
メッセージなんてでかいプロジェクトだと500個とか行っちゃって
詳細なんかわかんなくていいんじゃないの?
もうメッセージ一覧で確認することは諦めろよ的な
それになんの意味があるのかさっぱりわからんな
メッセージなんてでかいプロジェクトだと500個とか行っちゃって
詳細なんかわかんなくていいんじゃないの?
もうメッセージ一覧で確認することは諦めろよ的な
445デフォルトの名無しさん
2017/10/09(月) 09:24:41.04ID:L5aecCRz メッセージでこれまで見た中で一番多いのは3000だった
そこまで構えろとはいわんけどそういう性質のものではある
ソースの該当箇所に一つ一つ置いていく手間は省略できない
メッセージリソースIDとメッセージが照合できればそれでその作業は終わりじゃねーのか?
後、何を管理してもらいたい?
そこまで構えろとはいわんけどそういう性質のものではある
ソースの該当箇所に一つ一つ置いていく手間は省略できない
メッセージリソースIDとメッセージが照合できればそれでその作業は終わりじゃねーのか?
後、何を管理してもらいたい?
446デフォルトの名無しさん
2017/10/09(月) 10:08:03.54ID:PA3EvPtr447デフォルトの名無しさん
2017/10/09(月) 10:21:29.30ID:Y2JfmrWo 客の都合でID体系変更になってリテラル全部調べて置き換えて再テストしたトラウマ
する価値ないと思ってもとりあえずでいいから抽象化しておいて損はない
する価値ないと思ってもとりあえずでいいから抽象化しておいて損はない
448デフォルトの名無しさん
2017/10/09(月) 10:22:07.29ID:FteGtpX4 別ファイルに切り出して読み込めばいいと思う
449デフォルトの名無しさん
2017/10/09(月) 10:44:55.28ID:3IBabimx >>446
いやぁ、だからさ
ソースのエラー箇所に自動配置なんかできないんだからそこは300だろうが3000だろうが30000だろうが手動じゃん
IDとエラーメッセージが組にさえなってたらどういう構造にしようがやることかわんねーよ的な
いやぁ、だからさ
ソースのエラー箇所に自動配置なんかできないんだからそこは300だろうが3000だろうが30000だろうが手動じゃん
IDとエラーメッセージが組にさえなってたらどういう構造にしようがやることかわんねーよ的な
450デフォルトの名無しさん
2017/10/09(月) 10:48:47.25ID:3IBabimx visualstudioのjaファイルとかその辺の仕組み使えばいいんじゃないの?
ローカライズするならやっとかないと死ぬよ
ローカライズするならやっとかないと死ぬよ
451デフォルトの名無しさん
2017/10/09(月) 10:50:11.84ID:Vj0lVF94 rm = new ResourceManager(locale)
un = rm.get("property.name.user-name")
msg = rm.get("validation.error.max-length", un, 10)
print msg # ユーザー名は10文字以下で入力してください
スッキリ
un = rm.get("property.name.user-name")
msg = rm.get("validation.error.max-length", un, 10)
print msg # ユーザー名は10文字以下で入力してください
スッキリ
452デフォルトの名無しさん
2017/10/09(月) 10:55:11.14ID:PA3EvPtr453デフォルトの名無しさん
2017/10/09(月) 11:29:45.24ID:3IBabimx >>452
いやぁでもこの数やる気にはなんないなぁ
いやぁでもこの数やる気にはなんないなぁ
454デフォルトの名無しさん
2017/10/09(月) 11:31:53.98ID:3IBabimx455デフォルトの名無しさん
2017/10/09(月) 11:34:13.65ID:3IBabimx このケースで余計に一層設けるのはメリット薄いんじゃない?
って言いたい
って言いたい
456デフォルトの名無しさん
2017/10/09(月) 11:44:58.84ID:M//uOX8+ >>441
C#なら素直に.resx使う
少なくとも存在しないIDを使った場合に
コンパイルエラーになる仕組みを使う
種類ごとにグループ化(階層化)して管理しやすくする
メジャーなフレームワーク参照したら分かると思うがMSG_0123みたいな命名自体も悪手
もうどうしようもないのかもしれんが
C#なら素直に.resx使う
少なくとも存在しないIDを使った場合に
コンパイルエラーになる仕組みを使う
種類ごとにグループ化(階層化)して管理しやすくする
メジャーなフレームワーク参照したら分かると思うがMSG_0123みたいな命名自体も悪手
もうどうしようもないのかもしれんが
457デフォルトの名無しさん
2017/10/09(月) 11:50:08.07ID:3IBabimx458デフォルトの名無しさん
2017/10/09(月) 11:59:06.73ID:RdvZrZJ8 コードジェネレータがいいよ
メッセージID, メッセージテキスト, パラメータ数
Hoge, ほげ, 0
Fuga, {0}はふがです, 1
これをエクセルで管理してメッセージ管理クラスを出力
class MessageManager {
public static string Hoge() => "ほげ";
public static string Fuga(object p0) => string.Format("{0}はふがです", p0);
}
んでデータ数が増えてきたらエクセルをやめてデータベースで管理
エクセルを使えばお客様もお喜びになられるので一石二鳥
メッセージID, メッセージテキスト, パラメータ数
Hoge, ほげ, 0
Fuga, {0}はふがです, 1
これをエクセルで管理してメッセージ管理クラスを出力
class MessageManager {
public static string Hoge() => "ほげ";
public static string Fuga(object p0) => string.Format("{0}はふがです", p0);
}
んでデータ数が増えてきたらエクセルをやめてデータベースで管理
エクセルを使えばお客様もお喜びになられるので一石二鳥
459デフォルトの名無しさん
2017/10/09(月) 12:17:44.19ID:M//uOX8+ >>457
メンテナンス性を犠牲にしても
命名負荷を下げたいという意思決定をしてるんならいいんじゃないの
神クラス・神テーブルと同じアプローチだけど
物によってはそれが適切な選択の場合もあるんだろうから
メンテナンス性を犠牲にしても
命名負荷を下げたいという意思決定をしてるんならいいんじゃないの
神クラス・神テーブルと同じアプローチだけど
物によってはそれが適切な選択の場合もあるんだろうから
460デフォルトの名無しさん
2017/10/09(月) 12:35:04.44ID:1orfMMQz >>441
> メッセージリソース管理クラスの素晴らしい設計を教えてください
メッセージリソースなんてものを作らない。
view.AddMessage("あーがこーでどうなりました")
って日本語で書けばいい。
多言語化したいなら、gettextなどの言語やフレームワーク標準の
多言語化ライブラリを使えばいい話。
その場合は、英語でメッセージを書いて、日本語化するってことが
よく行われるが逆でもいいだろう。
> メッセージリソース管理クラスの素晴らしい設計を教えてください
メッセージリソースなんてものを作らない。
view.AddMessage("あーがこーでどうなりました")
って日本語で書けばいい。
多言語化したいなら、gettextなどの言語やフレームワーク標準の
多言語化ライブラリを使えばいい話。
その場合は、英語でメッセージを書いて、日本語化するってことが
よく行われるが逆でもいいだろう。
461デフォルトの名無しさん
2017/10/10(火) 07:21:02.20ID:JGhyCx0Y462デフォルトの名無しさん
2017/10/10(火) 08:31:03.78ID:v9JcaVeZ ゲームをオブジェクト指向で作ると作りにくいよ
相互作用の処理が多過ぎてオブジェクトに閉じない
相互作用の処理が多過ぎてオブジェクトに閉じない
463デフォルトの名無しさん
2017/10/10(火) 12:08:00.54ID:RxOfGqdN それは設計どころかゲームそのものとしての落とし込みが不十分
ゲームとか一定のルールに則った動作をするだよ
ゲームとか一定のルールに則った動作をするだよ
464デフォルトの名無しさん
2017/10/10(火) 12:15:07.34ID:duckiwE1465デフォルトの名無しさん
2017/10/10(火) 23:46:15.72ID:WxQVAUFU 「オブジェクト指向だからステージの俳優が全員なんか言ってきて
カントクは一人一人対応なんかしてたら死ぬな!!www」
…いや、間違った理解をした奴はまあそういうドマヌケやらかしがちだが
普通はステージステータスに集約されて、ディレクターは
そのステータスを見て上から必要な個々に指示が送られるように作るからね…
カントクは一人一人対応なんかしてたら死ぬな!!www」
…いや、間違った理解をした奴はまあそういうドマヌケやらかしがちだが
普通はステージステータスに集約されて、ディレクターは
そのステータスを見て上から必要な個々に指示が送られるように作るからね…
466デフォルトの名無しさん
2017/10/11(水) 00:09:15.15ID:i63/Wje0 ゲームは油断するとすぐにキャストや型判定だらけになってしまう
特定のクラス同士の時だけ発生する相互作用とか
特定のクラス同士の時だけ発生する相互作用とか
467デフォルトの名無しさん
2017/10/12(木) 12:26:13.92ID:UV6Mfibu ゲームとか業務とかピンキリだろ
468デフォルトの名無しさん
2017/10/12(木) 21:48:31.48ID:Drh75QCI お客さんが属性バリデーションも他のバリデーションフレームワークも使っちゃダメって言うんだけど
どうすれば楽にバリデーションできる?
言語はC#
テキストリソースは全てDBで管理されている
ロケールによってエラーテキストを変えなければならいとする
どうすれば楽にバリデーションできる?
言語はC#
テキストリソースは全てDBで管理されている
ロケールによってエラーテキストを変えなければならいとする
469デフォルトの名無しさん
2017/10/12(木) 22:09:08.92ID:o8TlX9Z0470デフォルトの名無しさん
2017/10/12(木) 22:34:53.95ID:Drh75QCI >>469
属性やフレームワークは設定方法がよくわからないのでメンテナンスの時に困るから
ひたすら単調にif文をズラズラと書いてるんだけどシンドイ
項目数が100近いPageもあってそれぞれが何種類かのバリデーションを行うからバリデーションだけで数百行のメソッドになることもある
属性やフレームワークは設定方法がよくわからないのでメンテナンスの時に困るから
ひたすら単調にif文をズラズラと書いてるんだけどシンドイ
項目数が100近いPageもあってそれぞれが何種類かのバリデーションを行うからバリデーションだけで数百行のメソッドになることもある
471デフォルトの名無しさん
2017/10/12(木) 23:00:42.84ID:o8TlX9Z0 >>470
xmlでルール書くやつは敬遠されるのは理解できなくもないが
単純な属性ベースは分かりやすいしメンテしやすいのにね
楽しようとすれば結局自前で簡易的なフレームワーク風のものを作ることになる
あまりにも数が多いならコード生成という選択肢も
xmlでルール書くやつは敬遠されるのは理解できなくもないが
単純な属性ベースは分かりやすいしメンテしやすいのにね
楽しようとすれば結局自前で簡易的なフレームワーク風のものを作ることになる
あまりにも数が多いならコード生成という選択肢も
472デフォルトの名無しさん
2017/10/12(木) 23:06:26.57ID:njn1yLjW >>470
ライセンス的に問題がないものをコピーすればいい
ライセンス的に問題がないものをコピーすればいい
474デフォルトの名無しさん
2017/10/13(金) 01:47:19.56ID:l1jERKvk >>470
Frameworkを使わないc#ってどんだけマゾなの?ランタイム自分で書いてんの?
Frameworkを使わないc#ってどんだけマゾなの?ランタイム自分で書いてんの?
475デフォルトの名無しさん
2017/10/13(金) 01:48:05.83ID:nTgCE4U5 >>470
そんな理由にならない理由に従おうとする方がバカ
そんな理由にならない理由に従おうとする方がバカ
476デフォルトの名無しさん
2017/10/13(金) 02:48:12.40ID:s0+Jkp8l 今回みたいな例だとライブラリを使わないで自作するとしたら
使った場合に比べて何倍ぐらいの金額を請求する?
使った場合に比べて何倍ぐらいの金額を請求する?
477デフォルトの名無しさん
2017/10/13(金) 02:56:05.56ID:GlXmqXn2 バリデーションが全体の工数に占める割合がわからないとなんともいえないけど、数倍なんてなるわけないだろアホ
どんだけバリデーションばっかやってるプロダクトを想定してんだよ
客に費用の話をするとき、「通常この規模だと20人月ですが、バリデーションライブラリが使えないので+50人月かかります」とでも言うのか
どんだけバリデーションばっかやってるプロダクトを想定してんだよ
客に費用の話をするとき、「通常この規模だと20人月ですが、バリデーションライブラリが使えないので+50人月かかります」とでも言うのか
478デフォルトの名無しさん
2017/10/13(金) 03:43:57.20ID:s0+Jkp8l はぁ? 増えた分の請求は当然するだろ。当たり前のことを当たり前にするだけだぞ
479デフォルトの名無しさん
2017/10/13(金) 04:33:13.10ID:l1jERKvk >>476
なんでいきなりフレームワークじゃなくてライブラリの話になってんの?
なんでいきなりフレームワークじゃなくてライブラリの話になってんの?
480デフォルトの名無しさん
2017/10/13(金) 04:36:24.84ID:zVcBlnUR481デフォルトの名無しさん
2017/10/13(金) 04:37:49.67ID:zVcBlnUR ごめん勘違い
工数の膨らみ方が半端なさ過ぎて非現実的ってのが言いたかった
工数の膨らみ方が半端なさ過ぎて非現実的ってのが言いたかった
482デフォルトの名無しさん
2017/10/13(金) 04:40:34.82ID:qOElJcq/ ひとまず使って組んで元の処理コピーして置き換えちゃえばいいんちゃう?
バリデーションのソースってあんでしょ?
バリデーションのソースってあんでしょ?
483デフォルトの名無しさん
2017/10/13(金) 05:21:13.13ID:s0+Jkp8l >>479
バリデーションのフレームワークなんてないでしょw
バリデーションのフレームワークなんてないでしょw
484デフォルトの名無しさん
2017/10/13(金) 07:46:49.24ID:DI18WdpZ >>483
フレームワークの一部としてバリデーションがあるやろ
フレームワークの一部としてバリデーションがあるやろ
485デフォルトの名無しさん
2017/10/13(金) 14:51:54.32ID:+zTlsJiZ バリデーションのフレームワーク普通にあるだろw
486デフォルトの名無しさん
2017/10/13(金) 16:33:32.34ID:kRlRrFWL ごめん、何言ってんだかよくわかんないんだけど、
まず、>>468のバリデーションって、一体何に対するバリデーションの話してるの?
まず、>>468のバリデーションって、一体何に対するバリデーションの話してるの?
487デフォルトの名無しさん
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は物事を無駄に複雑化するばかりで役に立たん
var msgFormat = getResource("error.required");
var label = getLabel("#foo");
addMessage(msgFormat, label);
addCss("#foo", "input-error");
}
以下100項目繰り返し
これ以上簡潔で保守性の高いバリデーションが存在しない件
OOPは物事を無駄に複雑化するばかりで役に立たん
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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【相撲】九州場所千秋楽 関脇・安青錦が初優勝 優勝決定戦で豊昇龍破る 所要14場所は史上2位のスピード記録 [ニーニーφ★]
- 【速報】 中国国営新聞社 「日本はすでに代価を支払った」 中国SNSで1位に 高市総理の発言めぐり ★3 [お断り★]
- 【外交】中国王毅外相「日本軍国主義の復活を決して許さない」 [1ゲットロボ★]
- 【コメ】やっぱり進次郎のほうがマシ…「コメの値下げは無理」と言い張る農林族の鈴木農水大臣 [ぐれ★]
- 【裁判】山上徹也被告の妹「大好きなお兄ちゃん」「旧統一教会信者の叔母から、選挙時に自民党の特定の候補に入れてほしいと…」奈良地裁 [1ゲットロボ★]
- 杉村太蔵「児童手当が富裕層にまで…」高市首相の経済対策に苦言「正気の沙汰とは思えない」 [蚤の市★]
- 【悲報】ツイッター愛国アカウント、続々と外国産だということが判明 つまり愛国者は外国人ということ? [158478931]
- 🏍👊😅👊三三盗んだバイクで走り出す~🏡
- 【悲報】中国さん、露骨にヒヨりはじめる..中国「も、もう日本は対価払ったからこの辺にしとくわ..」 高市大勝利へwww [916950698]
- 【軽自動車】結局、「N-BOX」のターボが一番いいんだよな。これ一台で何でもこなせる [201193242]
- 【悲報】Twitter、登録国を表示できる機能を追加し大炎上 [347751896]
- 🇺🇸アメリカ国務省「ヘイトスピーチを規制する国は、言論の自由を制限する人権侵害国家だ」 [481941988]
