teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問の意図を明確にしてみました。

2015/10/09 00:42

投稿

i50
i50

スコア227

title CHANGED
@@ -1,1 +1,1 @@
1
- 汎用クラスの使われ方
1
+ 汎用クラスの生成はどこがすべき?
body CHANGED
@@ -5,8 +5,8 @@
5
5
  staticな関数を集めたクラスではなくて、状態管理するのでnewする必要があります。
6
6
 
7
7
 
8
- **その場合、このクラス(ArrayConverter)を使用するクラスは**
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
- **感覚的には、(実際にはできませんが)PHPの標準関数を使用するからといって**
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
- **しかし、どちらの場合もHogeとArrayConverterの関係が密になりすぎて、**
69
+ しかし、どちらの場合もHogeとArrayConverterの関係が密になりすぎて、
65
- **ArrayConverterをダミーに差し替えるといった事が出来なくなるのが心配です。**
70
+ ArrayConverterをダミーに差し替えるといった事が出来なくなるのが心配です。
66
-
67
- さらにnewの場合に至っては、ArrayConverterを使用したいだけなのに、
68
- 生成までするというのは仕事しすぎ(生成はファクトリが行うべき)かと思っています。
69
71
  ======================================
70
72
 
71
73