質問編集履歴
6
微修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -102,7 +102,7 @@
|
|
102
102
|
|
103
103
|
public static implicit operator string(MyField val)
|
104
104
|
を実装したのでそのまま検証してくれないかな、とちょっと期待したのですがエラーが出ました。
|
105
|
-
('
|
105
|
+
('MyField': シール型 'string' から派生することはできません。)
|
106
106
|
|
107
107
|
**使いたい検証属性を全部実装するしかないでしょうか**。
|
108
108
|
|
5
検討3のコメントを修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -201,8 +201,8 @@
|
|
201
201
|
}
|
202
202
|
/*
|
203
203
|
model.FugaName
|
204
|
-
model.Org.FugaName
|
205
|
-
model.
|
204
|
+
model.GetFieldValue("1", "FugaName")
|
205
|
+
model.GetFieldValue("2", "FugaName")
|
206
206
|
のようにアクセスする
|
207
207
|
*/
|
208
208
|
```
|
4
HogeModel → HogeRow
title
CHANGED
File without changes
|
body
CHANGED
@@ -171,7 +171,7 @@
|
|
171
171
|
|
172
172
|
このケースについては、以下が気になった為 なしとしました。
|
173
173
|
|
174
|
-
・
|
174
|
+
・HogeRow には更新系のメソッドなども定義しているが、Org や Mod ではそれらのメソッドを呼んで欲しくない。(呼ばなければ良いだけなのですが、呼んでほしくないメソッドが定義されているというのが気になりました)
|
175
175
|
⇒ なお、サンプルコードでは省いていますが、HogeRow は既に別の基底クラスを継承しています。
|
176
176
|
なので「プロパティだけを定義したクラスを別に作って、Org, Mod はそのクラスで定義、HogeRow はそのクラスを継承」という方法もちょっと難しいです。
|
177
177
|
|
3
サンプルコードには無い関数に対する記述があった為修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -138,10 +138,10 @@
|
|
138
138
|
public string ModFugaName { get; set; }
|
139
139
|
/*
|
140
140
|
さらに
|
141
|
-
「Orgのデータがあるか」
|
141
|
+
「Orgのデータがあるか」
|
142
|
-
「Modのデータがあるか」
|
142
|
+
「Modのデータがあるか」
|
143
|
-
「上位権限者による編集が行われているか」
|
143
|
+
「上位権限者による編集が行われているか」
|
144
|
-
なども
|
144
|
+
などの判定ロジックも欲しい。MyField のように自作クラス化するならその中に作ってしまえるけど・・・
|
145
145
|
*/
|
146
146
|
...
|
147
147
|
}
|
2
文言を統一:「ユーザー、管理者」⇒「下位権限者、上位権限者」
title
CHANGED
File without changes
|
body
CHANGED
@@ -31,8 +31,8 @@
|
|
31
31
|
|
32
32
|
var model = new HogeRow();
|
33
33
|
model.FugaName.Value = "ふがふが"; // プロパティ値。
|
34
|
-
model.FugaName.Org = "フガフガ"; // [参照用として持ちたい]
|
34
|
+
model.FugaName.Org = "フガフガ"; // [参照用として持ちたい] 下位権限者が入力した値が入る
|
35
|
-
model.FugaName.Mod = "FUGA"; // [参照用として持ちたい]
|
35
|
+
model.FugaName.Mod = "FUGA"; // [参照用として持ちたい] 上位権限者側で修正した値が入る
|
36
36
|
|
37
37
|
...
|
38
38
|
public class MyField
|
1
「追記:そもそもの修正要件」以降を追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,25 +9,27 @@
|
|
9
9
|
|
10
10
|
↓ 現行
|
11
11
|
```csharp
|
12
|
+
// 一行分のデータのモデル
|
12
|
-
public class
|
13
|
+
public class HogeRow
|
13
14
|
{
|
14
15
|
public string FugaName { get; set; } // ★現行はただの string 型プロパティ
|
15
16
|
}
|
16
17
|
...
|
17
18
|
|
18
|
-
var model = new
|
19
|
+
var model = new HogeRow();
|
19
20
|
model.FugaName = "ふがふが";
|
20
21
|
```
|
21
22
|
|
22
23
|
↓ こんな感じで持ちたい
|
23
24
|
```csharp
|
25
|
+
// 一行分のデータのモデル
|
24
|
-
public class
|
26
|
+
public class HogeRow
|
25
27
|
{
|
26
28
|
public MyField FugaName { get; set; } // ★自作クラス型のプロパティにする
|
27
29
|
}
|
28
30
|
...
|
29
31
|
|
30
|
-
var model = new
|
32
|
+
var model = new HogeRow();
|
31
33
|
model.FugaName.Value = "ふがふが"; // プロパティ値。
|
32
34
|
model.FugaName.Org = "フガフガ"; // [参照用として持ちたい] ユーザーが入力した値が入る
|
33
35
|
model.FugaName.Mod = "FUGA"; // [参照用として持ちたい] 管理者側で修正した値が入る
|
@@ -84,7 +86,8 @@
|
|
84
86
|
- 件のモデルでは、検証属性を色々使っています。
|
85
87
|
|
86
88
|
```csharp
|
89
|
+
// 一行分のデータのモデル
|
87
|
-
public class
|
90
|
+
public class HogeRow
|
88
91
|
{
|
89
92
|
[Required]
|
90
93
|
[StringLength(10, ErrorMessage = "10桁以下で入力してください")]
|
@@ -103,6 +106,108 @@
|
|
103
106
|
|
104
107
|
**使いたい検証属性を全部実装するしかないでしょうか**。
|
105
108
|
|
109
|
+
|
110
|
+
### 追記:そもそもの修正要件
|
111
|
+
|
112
|
+
現状、単純に
|
113
|
+
「下位権限者が入力する」
|
114
|
+
「それを上位権限側で確認する(参照するのみ)」
|
115
|
+
というシステムがあります。
|
116
|
+
|
117
|
+
それに対し、
|
118
|
+
「上位権限者側でも修正を入れたい」
|
119
|
+
という要件が上がってきました。
|
120
|
+
|
121
|
+
なので、それぞれの入力フィールドに対し
|
122
|
+
「下位権限者による入力値」Org
|
123
|
+
「上位権限者による入力値」Mod
|
124
|
+
「最終的な採用値」Value
|
125
|
+
を持ちたいと思っています。
|
126
|
+
(Org, Mod は画面表示用として持ちたいだけ)
|
127
|
+
|
128
|
+
#### 検討1:それぞれプロパティを個別に用意する
|
129
|
+
|
130
|
+
まず考えたのは以下ですが、プロパティが多く、同様のモデルも多い為、ひとまず無しとしました。
|
131
|
+
|
132
|
+
```csharp
|
133
|
+
// 一行分のデータのモデル
|
134
|
+
public class HogeRow
|
135
|
+
{
|
136
|
+
public string FugaName { get; set; }
|
137
|
+
public string OrgFugaName { get; set; }
|
138
|
+
public string ModFugaName { get; set; }
|
139
|
+
/*
|
140
|
+
さらに
|
141
|
+
「Orgのデータがあるか」 MyField.ExistsOrg() に相当する判定ロジック
|
142
|
+
「Modのデータがあるか」 MyField.ExistsMod() に相当する判定ロジック
|
143
|
+
「上位権限者による編集が行われているか」 MyField.IsModified() に相当する判定ロジック
|
144
|
+
なども必要
|
145
|
+
*/
|
146
|
+
...
|
147
|
+
}
|
148
|
+
```
|
149
|
+
|
150
|
+
##### 検討2:モデルの入れ子にする
|
151
|
+
|
152
|
+
次に以下のパターンも考えました。
|
153
|
+
|
154
|
+
```csharp
|
155
|
+
// 一行分のデータのモデル
|
156
|
+
public class HogeRow
|
157
|
+
{
|
158
|
+
public HogeRow Org { get; }
|
159
|
+
public HogeRow Mod { get; }
|
160
|
+
|
161
|
+
public string FugaName { get; set; }
|
162
|
+
...
|
163
|
+
}
|
164
|
+
/*
|
165
|
+
model.FugaName
|
166
|
+
model.Org.FugaName
|
167
|
+
model.Mod.FugaName
|
168
|
+
のようにアクセスする
|
169
|
+
*/
|
170
|
+
```
|
171
|
+
|
172
|
+
このケースについては、以下が気になった為 なしとしました。
|
173
|
+
|
174
|
+
・HogeModel には更新系のメソッドなども定義しているが、Org や Mod ではそれらのメソッドを呼んで欲しくない。(呼ばなければ良いだけなのですが、呼んでほしくないメソッドが定義されているというのが気になりました)
|
175
|
+
⇒ なお、サンプルコードでは省いていますが、HogeRow は既に別の基底クラスを継承しています。
|
176
|
+
なので「プロパティだけを定義したクラスを別に作って、Org, Mod はそのクラスで定義、HogeRow はそのクラスを継承」という方法もちょっと難しいです。
|
177
|
+
|
178
|
+
・やはり プロパティ単位で Org や Mod を扱いたい。
|
179
|
+
(model.Org.FugaName ではなく model.FugaName.Org で扱いたい)
|
180
|
+
「上位権限者による編集が行われているか」の判定等をするのにもその方がやりやすいので・・・
|
181
|
+
|
182
|
+
|
183
|
+
#### 検討3:ディクショナリで持つ
|
184
|
+
|
185
|
+
参照用の値はディクショナリに溜めようかとも考えたのですが、
|
186
|
+
文字列でアクセスするのがちょっと嫌だったので却下しました。
|
187
|
+
|
188
|
+
```csharp
|
189
|
+
// 一行分のデータのモデル
|
190
|
+
public class HogeRow
|
191
|
+
{
|
192
|
+
public string FugaName { get; set; }
|
193
|
+
...
|
194
|
+
|
195
|
+
// key=権限区分@プロパティ名で Org, Mod の値を持つ
|
196
|
+
private Dictionary<string, string> dict = new Dictionary<string, string>();
|
197
|
+
public string GetFieldValue(string kengenKbn, string fieldName)
|
198
|
+
{
|
199
|
+
// 取得用メソッドなどを用意
|
200
|
+
}
|
201
|
+
}
|
202
|
+
/*
|
203
|
+
model.FugaName
|
204
|
+
model.Org.FugaName
|
205
|
+
model.Mod.FugaName
|
206
|
+
のようにアクセスする
|
207
|
+
*/
|
208
|
+
```
|
209
|
+
|
210
|
+
|
106
211
|
-----
|
107
212
|
|
108
213
|
以上です。
|