質問編集履歴

6

微修正

2018/05/15 06:36

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -206,7 +206,7 @@
206
206
 
207
207
  を実装したのでそのまま検証してくれないかな、とちょっと期待したのですがエラーが出ました。
208
208
 
209
- ('MyFieldValue': シール型 'string' から派生することはできません。)
209
+ ('MyField': シール型 'string' から派生することはできません。)
210
210
 
211
211
 
212
212
 

5

検討3のコメントを修正

2018/05/15 06:36

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -404,9 +404,9 @@
404
404
 
405
405
  model.FugaName
406
406
 
407
- model.Org.FugaName
408
-
409
- model.Mod.FugaName
407
+ model.GetFieldValue("1", "FugaName")
408
+
409
+ model.GetFieldValue("2", "FugaName")
410
410
 
411
411
  のようにアクセスする
412
412
 

4

HogeModel → HogeRow

2018/05/15 04:46

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -344,7 +344,7 @@
344
344
 
345
345
 
346
346
 
347
- ・HogeModel には更新系のメソッドなども定義しているが、Org や Mod ではそれらのメソッドを呼んで欲しくない。(呼ばなければ良いだけなのですが、呼んでほしくないメソッドが定義されているというのが気になりました)
347
+ ・HogeRow には更新系のメソッドなども定義しているが、Org や Mod ではそれらのメソッドを呼んで欲しくない。(呼ばなければ良いだけなのですが、呼んでほしくないメソッドが定義されているというのが気になりました)
348
348
 
349
349
  ⇒ なお、サンプルコードでは省いていますが、HogeRow は既に別の基底クラスを継承しています。
350
350
 

3

サンプルコードには無い関数に対する記述があった為修正

2018/05/15 04:44

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -278,13 +278,13 @@
278
278
 
279
279
  さらに
280
280
 
281
- 「Orgのデータがあるか」 MyField.ExistsOrg() に相当する判定ロジック
281
+ 「Orgのデータがあるか」
282
-
282
+
283
- 「Modのデータがあるか」 MyField.ExistsMod() に相当する判定ロジック
283
+ 「Modのデータがあるか」
284
-
284
+
285
- 「上位権限者による編集が行われているか」 MyField.IsModified() に相当する判定ロジック
285
+ 「上位権限者による編集が行われているか」
286
-
286
+
287
- なども必要
287
+ などの判定ロジック欲しい。MyField のように自作クラス化するならその中に作ってしまえるけど・・・
288
288
 
289
289
  */
290
290
 

2

文言を統一:「ユーザー、管理者」⇒「下位権限者、上位権限者」

2018/05/15 04:31

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -64,9 +64,9 @@
64
64
 
65
65
  model.FugaName.Value = "ふがふが"; // プロパティ値。
66
66
 
67
- model.FugaName.Org = "フガフガ"; // [参照用として持ちたい] ユーザーが入力した値が入る
67
+ model.FugaName.Org = "フガフガ"; // [参照用として持ちたい] 下位権限者が入力した値が入る
68
-
68
+
69
- model.FugaName.Mod = "FUGA"; // [参照用として持ちたい] 管理者側で修正した値が入る
69
+ model.FugaName.Mod = "FUGA"; // [参照用として持ちたい] 上位権限者側で修正した値が入る
70
70
 
71
71
 
72
72
 

1

「追記:そもそもの修正要件」以降を追加

2018/05/15 04:28

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,9 @@
20
20
 
21
21
  ```csharp
22
22
 
23
+ // 一行分のデータのモデル
24
+
23
- public class HogeModel
25
+ public class HogeRow
24
26
 
25
27
  {
26
28
 
@@ -32,7 +34,7 @@
32
34
 
33
35
 
34
36
 
35
- var model = new HogeModel();
37
+ var model = new HogeRow();
36
38
 
37
39
  model.FugaName = "ふがふが";
38
40
 
@@ -44,7 +46,9 @@
44
46
 
45
47
  ```csharp
46
48
 
49
+ // 一行分のデータのモデル
50
+
47
- public class HogeModel
51
+ public class HogeRow
48
52
 
49
53
  {
50
54
 
@@ -56,7 +60,7 @@
56
60
 
57
61
 
58
62
 
59
- var model = new HogeModel();
63
+ var model = new HogeRow();
60
64
 
61
65
  model.FugaName.Value = "ふがふが"; // プロパティ値。
62
66
 
@@ -170,7 +174,9 @@
170
174
 
171
175
  ```csharp
172
176
 
177
+ // 一行分のデータのモデル
178
+
173
- public class HogeModel
179
+ public class HogeRow
174
180
 
175
181
  {
176
182
 
@@ -208,6 +214,210 @@
208
214
 
209
215
 
210
216
 
217
+
218
+
219
+ ### 追記:そもそもの修正要件
220
+
221
+
222
+
223
+ 現状、単純に
224
+
225
+ 「下位権限者が入力する」
226
+
227
+ 「それを上位権限側で確認する(参照するのみ)」
228
+
229
+ というシステムがあります。
230
+
231
+
232
+
233
+ それに対し、
234
+
235
+ 「上位権限者側でも修正を入れたい」
236
+
237
+ という要件が上がってきました。
238
+
239
+
240
+
241
+ なので、それぞれの入力フィールドに対し
242
+
243
+ 「下位権限者による入力値」Org
244
+
245
+ 「上位権限者による入力値」Mod
246
+
247
+ 「最終的な採用値」Value
248
+
249
+ を持ちたいと思っています。
250
+
251
+ (Org, Mod は画面表示用として持ちたいだけ)
252
+
253
+
254
+
255
+ #### 検討1:それぞれプロパティを個別に用意する
256
+
257
+
258
+
259
+ まず考えたのは以下ですが、プロパティが多く、同様のモデルも多い為、ひとまず無しとしました。
260
+
261
+
262
+
263
+ ```csharp
264
+
265
+ // 一行分のデータのモデル
266
+
267
+ public class HogeRow
268
+
269
+ {
270
+
271
+ public string FugaName { get; set; }
272
+
273
+ public string OrgFugaName { get; set; }
274
+
275
+ public string ModFugaName { get; set; }
276
+
277
+ /*
278
+
279
+ さらに
280
+
281
+ 「Orgのデータがあるか」 MyField.ExistsOrg() に相当する判定ロジック
282
+
283
+ 「Modのデータがあるか」 MyField.ExistsMod() に相当する判定ロジック
284
+
285
+ 「上位権限者による編集が行われているか」 MyField.IsModified() に相当する判定ロジック
286
+
287
+ なども必要
288
+
289
+ */
290
+
291
+ ...
292
+
293
+ }
294
+
295
+ ```
296
+
297
+
298
+
299
+ ##### 検討2:モデルの入れ子にする
300
+
301
+
302
+
303
+ 次に以下のパターンも考えました。
304
+
305
+
306
+
307
+ ```csharp
308
+
309
+ // 一行分のデータのモデル
310
+
311
+ public class HogeRow
312
+
313
+ {
314
+
315
+ public HogeRow Org { get; }
316
+
317
+ public HogeRow Mod { get; }
318
+
319
+
320
+
321
+ public string FugaName { get; set; }
322
+
323
+ ...
324
+
325
+ }
326
+
327
+ /*
328
+
329
+ model.FugaName
330
+
331
+ model.Org.FugaName
332
+
333
+ model.Mod.FugaName
334
+
335
+ のようにアクセスする
336
+
337
+ */
338
+
339
+ ```
340
+
341
+
342
+
343
+ このケースについては、以下が気になった為 なしとしました。
344
+
345
+
346
+
347
+ ・HogeModel には更新系のメソッドなども定義しているが、Org や Mod ではそれらのメソッドを呼んで欲しくない。(呼ばなければ良いだけなのですが、呼んでほしくないメソッドが定義されているというのが気になりました)
348
+
349
+ ⇒ なお、サンプルコードでは省いていますが、HogeRow は既に別の基底クラスを継承しています。
350
+
351
+ なので「プロパティだけを定義したクラスを別に作って、Org, Mod はそのクラスで定義、HogeRow はそのクラスを継承」という方法もちょっと難しいです。
352
+
353
+
354
+
355
+ ・やはり プロパティ単位で Org や Mod を扱いたい。
356
+
357
+ (model.Org.FugaName ではなく model.FugaName.Org で扱いたい)
358
+
359
+ 「上位権限者による編集が行われているか」の判定等をするのにもその方がやりやすいので・・・
360
+
361
+
362
+
363
+
364
+
365
+ #### 検討3:ディクショナリで持つ
366
+
367
+
368
+
369
+ 参照用の値はディクショナリに溜めようかとも考えたのですが、
370
+
371
+ 文字列でアクセスするのがちょっと嫌だったので却下しました。
372
+
373
+
374
+
375
+ ```csharp
376
+
377
+ // 一行分のデータのモデル
378
+
379
+ public class HogeRow
380
+
381
+ {
382
+
383
+ public string FugaName { get; set; }
384
+
385
+ ...
386
+
387
+
388
+
389
+ // key=権限区分@プロパティ名で Org, Mod の値を持つ
390
+
391
+ private Dictionary<string, string> dict = new Dictionary<string, string>();
392
+
393
+ public string GetFieldValue(string kengenKbn, string fieldName)
394
+
395
+ {
396
+
397
+ // 取得用メソッドなどを用意
398
+
399
+ }
400
+
401
+ }
402
+
403
+ /*
404
+
405
+ model.FugaName
406
+
407
+ model.Org.FugaName
408
+
409
+ model.Mod.FugaName
410
+
411
+ のようにアクセスする
412
+
413
+ */
414
+
415
+ ```
416
+
417
+
418
+
419
+
420
+
211
421
  -----
212
422
 
213
423