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

質問編集履歴

3

flied_onionさんへの返答

2016/08/14 11:25

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -101,4 +101,37 @@
101
101
 
102
102
  ### 追記
103
103
 
104
- とりあえず、今回試した2つのルールを実践した結果、小さなクラスが結果的に出来上がりましたが、そのおかけで自然と「座標に関する振る舞いはCordinateクラスでしよう」とか、そういった発想が生まれやすいなという実感はありました。
104
+ とりあえず、今回試した2つのルールを実践した結果、小さなクラスが結果的に出来上がりましたが、そのおかけで自然と「座標に関する振る舞いはCordinateクラスでしよう」とか、そういった発想が生まれやすいなという実感はありました。
105
+
106
+
107
+
108
+ ### flied_onionさんへの返答
109
+ > LengthをCordinateから生成できない気がするんですが、Lengthは2つのCordinateで求められるべきじゃないかな、と。
110
+ > Cordinateが「二次元の原点座標からの距離」と考えるならLengthもCordinateでいいような気もしてます。
111
+
112
+ 円の半径をLength型で表していますが、Lengthを2点の座標から表すことにすると円の半径をどう表したら良いのでしょう。
113
+ 円の中心点と外周を結ぶ線が半径ですから、円の半径をLength型で定義するためには円の中心点がまずxy座標ではどこで、そして、外周上の点はx, y座標のどこにするかを決めないと半径を出せないと思うので、なんだか小難しいですね。。。
114
+ そうすべきものなのでしょうか?
115
+
116
+ Lineクラスみたいなものであれば、初期化時に始点、終点を決めて生成するというのは納得です。
117
+
118
+ > > Q.ここは新しいPointクラスのインスタンスを生成して返すべきですか???
119
+ >
120
+ > 逆に聞きますが、Pointでないならそれは何を返してるんですか?
121
+ > それ(設計)次第かと。
122
+
123
+ メソッドの戻り値を何にして呼び出し元に渡すかは確かにケースバイケースですよね。
124
+ 単純にxy座標だけ知りたければ、{x: 10, y: 10}みたいな戻り値で十分であるということですよね。
125
+
126
+ > 少なくともpositionとcenterPositionは同じ物を返した方が一貫性があっていいと思います。
127
+
128
+ これは本当ですね! ここは統一すべきだと感じました。ありがとうございます。
129
+
130
+ > 私にはこれが依存性の注入に見えませんでした(元がプリミティブだからかな)。
131
+ > 前はCircle内のPointをコンストラクタに渡されたx,yでコンストラクタの中でnewしてたのを、
132
+ > Pointを受け取るようにして解消したってことでしょうか?
133
+
134
+ その通りです! 別質問で詳しく投稿しています。
135
+ [https://teratail.com/questions/44223](https://teratail.com/questions/44223)
136
+
137
+ 今はCordinateクラスもLengthクラスもPointクラスも特にメソッドらしいメソッドがないですが、長さの単位変換をLengthクラスが行ったり、座標変換をPointクラスが行ったりとなるのかなと思っています。

2

感想

2016/08/14 11:25

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -96,4 +96,9 @@
96
96
 
97
97
  //Q.依存性の注入を愚直にすると、引数がこんなことになってしまうのですが大丈夫でしょうか?
98
98
  var circle = new Circle(new Point(new Cordinate(10), new Cordinate(10)), new Length(10));
99
- ```
99
+ ```
100
+
101
+
102
+ ### 追記
103
+
104
+ とりあえず、今回試した2つのルールを実践した結果、小さなクラスが結果的に出来上がりましたが、そのおかけで自然と「座標に関する振る舞いはCordinateクラスでしよう」とか、そういった発想が生まれやすいなという実感はありました。

1

追記

2016/08/14 07:03

投稿

canvas
canvas

スコア62

title CHANGED
File without changes
body CHANGED
@@ -1,18 +1,18 @@
1
1
  #質問
2
-
2
+ ![イメージ説明](733162200570443a22906189e68ba84f.png)
3
3
  書籍「ThoughtWorksアンソロジー」の「第5章 オブジェクト指向エクササイズ」
4
4
 
5
- 上記書籍自体は読んでおりませんが、ネット上でこの本で紹介されている「オブジェクト指向エクササイズ」について触れているページを幾つか見て気になっていたので実践してみました。
5
+ 上記書籍自体はまだ未購入で読んでおりませんが、ネット上でこの本で紹介されている「オブジェクト指向エクササイズ」について触れているページを幾つか見て気になっていたので実践してみました。
6
6
 
7
7
  実践してみたのは良いのですが、なんだか良くわからなくなってしまいました。
8
- 「よくわからなくなった」という部分が質問箇所でして、いかに掲載するコードのコメントに記載しております。
8
+ 「よくわからなくなった」という部分が質問箇所でして、いかに掲載するコードのコメントに記載しておりますので、そちらのコメントを参照頂けると幸いです
9
9
 
10
10
  以下のコードでは「オブジェクト指向エクササイズ」の以下の2つのルールを実践したつもりです。
11
11
 
12
12
  [ルール: インスタンス変数2つ](http://d.hatena.ne.jp/asakichy/20090619/1245369203)
13
13
  [ルール:プリミティブ禁止](http://d.hatena.ne.jp/asakichy/20090615)
14
14
 
15
- 別質問で立てている「[円クラスをMVC的に実装したいです!](https://teratail.com/questions/44161)」のコードをリファクタリングする目的で取り組んでみました。
15
+ 別質問で立てている「[円クラスをMVC的に実装したいです!](https://teratail.com/questions/44161)」のコードをリファクタリングする目的で練習がてらに取り組んでみました。
16
16
 
17
17
 
18
18
  ## コード