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

回答編集履歴

1

追記に対して返答。

2016/08/14 12:13

投稿

flied_onion
flied_onion

スコア2604

answer CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  LengthをCordinateから生成できない気がするんですが、Lengthは2つのCordinateで求められるべきじゃないかな、と。
6
6
  Cordinateが「二次元の原点座標からの距離」と考えるならLengthもCordinateでいいような気もしてます。
7
+ → 訂正:「一次元の原点座標からの距離」の間違いでした。
7
8
 
8
9
  ---
9
10
 
@@ -23,4 +24,37 @@
23
24
 
24
25
  私にはこれが依存性の注入に見えませんでした(元がプリミティブだからかな)。
25
26
  前はCircle内のPointをコンストラクタに渡されたx,yでコンストラクタの中でnewしてたのを、
26
- Pointを受け取るようにして解消したってことでしょうか?
27
+ Pointを受け取るようにして解消したってことでしょうか?
28
+
29
+ ---
30
+
31
+ 追記分に関して回答します。
32
+
33
+ > 円の半径をLength型で表していますが、Lengthを2点の座標から表すことにすると円の半径をどう表したら良いのでしょう。
34
+
35
+ すいません、「二次元の原点座標からの距離」と書いてしまいましたが、「一次元」の間違いです。
36
+ つまりLengthは直線距離と考えています。
37
+ 「2点間」という情報を持たせるならベクトルになるでしょう。
38
+ で、Cordinateも距離と捉えられ、( x:Cordinate, y:Cordinate はどちらも原点からの直線距離 )
39
+
40
+ たとえば原点(0,0) 半径 5 の円Aの半径の長さ(Length)と、点(5,0) が中心点の円Bの x座標(Cordinate)
41
+ があったとして、どちらも x軸上の原点からの距離と見えます。つまりどちらも同じ物に見えます。
42
+
43
+ 点(0,5)が中心点の円Cがあって、円Aと円Bの中心点の距離(5:Length)と 円Aと円Cの中心点の距離(5:Length)に差を設ける(前述のベクトルの様に)なら良いんですけど、そうでないなら意味のある区分けになっていない気がしました。
44
+ 図形から離れて、金銭を扱うプログラムでMoneyクラスを設けたとして、今の貯金額(Cordinateに相当)とこれから預金する額(Lengthに相当)を分けて考えている様に見えて不自然だなと感じただけです。
45
+ この辺りも設計次第なのでしょうし、強くそうした方が良いというわけでもないです。
46
+
47
+ > 単純にxy座標だけ知りたければ、{x: 10, y: 10}みたいな戻り値で十分であるということですよね。
48
+
49
+ むしろ x,y座標なら、コンストラクタで円の中心をPointで指定させておいて何事かとは感じそうな気はします。座標はPointという契約ではなかったのかと。(Circleのコンストラクタがその形式も受け入れるならそれでもいいです)
50
+ toRawCordinates とか、外部ライブラリとの連携のために、リテラル型の情報に返してくれるといったメソッドなら、そういう戻り値でもいいと思います。
51
+
52
+ > その通りです! 別質問で詳しく投稿しています。
53
+
54
+ そちらは見てませんがDIというと型の交換を可能にしたいなと思うので(個人的にです)、
55
+ 先の例で言えばLengthが高機能になったり、Vectorが生まれても、
56
+ Cordinate, Length, Vector いずれもがMeasurableを実装していてCircleの初期化半径としてはMeasurableを渡せばいいみたいにしたくなりますね。いや、かなり適当に書いてますが。
57
+ それによって、CircleはLength, Vectorに依存しなくなるという(現実的にはCircleのなにがしかの戻り値で依存することになりそうですけどね)。
58
+
59
+ ざっくばらんに書いてみました、これ以上は深く考えるつもりはないです。
60
+ 駄文失礼しました。