質問編集履歴
1
質問の意図を明確にしてみました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
汎用クラスの
|
1
|
+
汎用クラスの生成はどこがすべき?
|
body
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
staticな関数を集めたクラスではなくて、状態管理するのでnewする必要があります。
|
6
6
|
|
7
7
|
|
8
|
-
**その場合、
|
8
|
+
**その場合、ArrayConverterを使用するクラスは**
|
9
|
-
**ど
|
9
|
+
**ArrayConverterの生成について、どこの責任と捉えるべきなのでしょうか。**
|
10
10
|
|
11
11
|
さしあたって、A案B案を考えていますが、
|
12
12
|
どちらも決め手に欠けているように思っています。
|
@@ -28,15 +28,17 @@
|
|
28
28
|
}
|
29
29
|
|
30
30
|
```
|
31
|
+
**ArrayConverterの生成の責任はHogeには無い(生成すべきではない)と考え、**
|
32
|
+
**Hogeは、ArrayConverterを使用する事をコンストラクタで宣言だけすべきと考えました。**
|
31
33
|
テストもできるので、無難な設計と考えています。
|
32
34
|
|
33
35
|
しかし、標準の配列関数の組み合わせなだけのクラスなので、
|
34
36
|
本質的にコンストラクタの引数に指定するレベルの物なのか?と悩んでいます。
|
35
37
|
|
36
|
-
|
38
|
+
感覚的には、(実際にはできませんが)PHPの標準関数を使用するからといって
|
37
|
-
|
39
|
+
コンストラクタの引数に標準関数を並べるような感覚でして、
|
38
40
|
**似たようなクラスが増えていった場合、**
|
39
|
-
**コンストラクタの引数が多くなりすぎるのでは?と思っています。
|
41
|
+
**コンストラクタの引数が多くなりすぎるのでは?**と思っています。
|
40
42
|
|
41
43
|
======================================
|
42
44
|
B案:使う場所でnewするか、getInstanceする
|
@@ -59,13 +61,13 @@
|
|
59
61
|
}
|
60
62
|
|
61
63
|
```
|
64
|
+
**ArrayConverterのような汎用クラスであれば、**
|
65
|
+
**標準関数と同じように扱いコンストラクタを通じた使用の宣言は必要なく、**
|
66
|
+
**Hogeに生成の責任がある(というより自由に生成してよい)と考えました。**
|
62
|
-
|
67
|
+
直感的で分かりやすいと考えています。
|
63
68
|
|
64
|
-
|
69
|
+
しかし、どちらの場合もHogeとArrayConverterの関係が密になりすぎて、
|
65
|
-
|
70
|
+
ArrayConverterをダミーに差し替えるといった事が出来なくなるのが心配です。
|
66
|
-
|
67
|
-
さらにnewの場合に至っては、ArrayConverterを使用したいだけなのに、
|
68
|
-
生成までするというのは仕事しすぎ(生成はファクトリが行うべき)かと思っています。
|
69
71
|
======================================
|
70
72
|
|
71
73
|
|