回答編集履歴

6

コメントを受けて

2017/01/20 05:02

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -93,3 +93,71 @@
93
93
 
94
94
 
95
95
  のほうが好きです。
96
+
97
+
98
+
99
+ ---
100
+
101
+
102
+
103
+ - ファイルオープンに失敗したら、決まった場所に決まったログを吐く。
104
+
105
+ - ファイルオープン失敗時の動作は変更の可能性があるし、そうなっても容易に切り替えられないといけない。
106
+
107
+ - データはファイル以外のところから取ってくるかもしれないし、そうなっても容易に切り替えられないといけない。
108
+
109
+ - ファイル以外のところから取ってくる場合もやっぱり失敗するかもしれない。
110
+
111
+ - ファイル以外のところから取ってきて失敗した場合の動作はファイルオープン失敗のときと同じとは限らない。
112
+
113
+
114
+
115
+ ...
116
+
117
+
118
+
119
+ - そうだ八百屋の会計システムを扱えるようにしなきゃ!
120
+
121
+
122
+
123
+ と、柔軟にしていくのもキリがないので
124
+
125
+
126
+
127
+ - Done is better than perfect に逃げる。
128
+
129
+ - YAGNI原則に逃げる。
130
+
131
+ - SOLID原則を突き詰めて、関数型言語に逃げる。そして迷う。
132
+
133
+
134
+
135
+ としたいところです。
136
+
137
+
138
+
139
+ いや俺は逃げないと言う場合は...どうしましょうね。
140
+
141
+
142
+
143
+ とりあえずGetData()は失敗の可能性があるので何らかの方法で伝えなきゃいけないのでそうするとして、
144
+
145
+ (もちろんIDataGetのシグネチャは返し方によっては変える。
146
+
147
+ C#だとインターフェースで例外を投げることを強制できないし、
148
+
149
+ じゃあEither型とかSuccess型を実装して使うのも大変だしで悩ましいです。)
150
+
151
+
152
+
153
+ 失敗時にどうするかを変更可能にしたいならそれも引数として渡さなければならないですね、
154
+
155
+ 新しくインターフェースを増やすか、Actionで渡すか悩みどころですね。
156
+
157
+ 統一感出すならインターフェース増やしますか。
158
+
159
+ それかもうIGetDataの責務を拡張するうまい説明か新しいインターフェース名を考えるかです。
160
+
161
+
162
+
163
+

5

追記に対して

2017/01/20 05:02

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -56,6 +56,28 @@
56
56
 
57
57
 
58
58
 
59
+ > 各インターフェースは処理が中断するかどうかをTuple.Item1に設定するようにしました。trueは正常終了,falseは異常終了,nullは中断しないことを示すものとします。
60
+
61
+
62
+
63
+ IGetDataはデータを取ってくるものですが、
64
+
65
+ こいつが「中断するかどうか」という全体の処理の流れに口を出すのは
66
+
67
+ いかがなものでしょうか?
68
+
69
+
70
+
71
+ あと「処理の結果はtrue/false/nullで表します」と言われても
72
+
73
+ 作った人しか対応関係がわからないので、enumかタプルやめて例外を使ったほうがいいです。
74
+
75
+
76
+
77
+ ---
78
+
79
+
80
+
59
81
  ところでインターフェースの名前ですが
60
82
 
61
83
  例にしても、

4

再考

2017/01/20 03:40

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -56,26 +56,6 @@
56
56
 
57
57
 
58
58
 
59
- > 各インターフェースは処理が中断するかどうかをTuple.Item1に設定するようにしました。trueは正常終了,falseは異常終了,nullは中断しないことを示すものとします。戻り値があったものはTuple.Item2にその値が設定されます。
60
-
61
-
62
-
63
- これをやってしまうと、
64
-
65
- 例えばGetDataでデータが取れなかった場合は異常終了にしたくなった場合は
66
-
67
- すべてのIGetData実装クラスを書き換えることになります。
68
-
69
-
70
-
71
- 何が起こったかを伝えるべきで、どうするべきかは返さないほうがいいです。
72
-
73
-
74
-
75
- ---
76
-
77
-
78
-
79
59
  ところでインターフェースの名前ですが
80
60
 
81
61
  例にしても、

3

追記に対して

2017/01/20 03:21

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -56,6 +56,26 @@
56
56
 
57
57
 
58
58
 
59
+ > 各インターフェースは処理が中断するかどうかをTuple.Item1に設定するようにしました。trueは正常終了,falseは異常終了,nullは中断しないことを示すものとします。戻り値があったものはTuple.Item2にその値が設定されます。
60
+
61
+
62
+
63
+ これをやってしまうと、
64
+
65
+ 例えばGetDataでデータが取れなかった場合は異常終了にしたくなった場合は
66
+
67
+ すべてのIGetData実装クラスを書き換えることになります。
68
+
69
+
70
+
71
+ 何が起こったかを伝えるべきで、どうするべきかは返さないほうがいいです。
72
+
73
+
74
+
75
+ ---
76
+
77
+
78
+
59
79
  ところでインターフェースの名前ですが
60
80
 
61
81
  例にしても、

2

インターフェース名について

2017/01/20 03:18

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -51,3 +51,23 @@
51
51
  パースした結果に応じて何するかはこいつの仕事ではない。
52
52
 
53
53
 
54
+
55
+ ---
56
+
57
+
58
+
59
+ ところでインターフェースの名前ですが
60
+
61
+ 例にしても、
62
+
63
+
64
+
65
+ - IDataGetter
66
+
67
+ - IDataPaser
68
+
69
+ - IDataSender
70
+
71
+
72
+
73
+ のほうが好きです。

1

typo

2017/01/20 02:47

投稿

ozwk
ozwk

スコア13521

test CHANGED
@@ -1,4 +1,4 @@
1
- - IDataGet
1
+ - IGetData
2
2
 
3
3
  rawDataを(どこからか)取得する
4
4
 
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- IDataGetはデータを取得するのが仕事、
37
+ IGetDataはデータを取得するのが仕事、
38
38
 
39
39
  データが取得できないのが例外的状況ならDataGetメソッドで例外投げるし、
40
40
 
@@ -49,3 +49,5 @@
49
49
  パースするのがこいつの仕事であって、
50
50
 
51
51
  パースした結果に応じて何するかはこいつの仕事ではない。
52
+
53
+