tonkat-prtq / java-bingo-app

0 stars 0 forks source link

抽選対象の数字の範囲に関する処理をインターフェースなどに切り出したい #10

Open tonkat-prtq opened 2 years ago

tonkat-prtq commented 2 years ago

https://github.com/tonkat-prtq/java-bingo-app/blob/8faed432031514167f1f780d64a61cd958cffe77/src/com/company/Number.java

https://github.com/tonkat-prtq/java-bingo-app/blob/8faed432031514167f1f780d64a61cd958cffe77/src/com/company/Number.java#L1-L7

やりたいこと

→ 抽選対象の数字の範囲を決めるメソッドを切り出したい

問題点

複数のクラスで「抽選対象の数字の範囲」を使うので、いちいちクラスごとで呼び出すのではなく、切り出してそれを呼び出す形にしたいと考えましたが、逆にごちゃついてしまったような感じです。

もしかして、「抽選対象の数字の範囲」クラスを値オブジェクトとして作ってしまったほうが良いんでしょうか……

k-sawahata commented 2 years ago

個人的な感覚ですが、NumberがInterfaceと言われると変な感じがしますね。。。 たぶんInterfaceのイメージ感が違うのかなぁと。

インタフェースは実装(implements)するものです。 どういうことかというと、「~ができる」を定めるもので、インタフェース名を見れば何ができるのかがわかるが大事です。

今回だと、BingoCardがNumberを実装してもなにができるようになるかがよくわからないですよね。

また、Interfaceは基本は型として使われることが多いです。 Number num = new BingoCard(); となってしまうので、やはりよくわからない。。。

むしろ、BingoCardとBingoTroutこそがInterfaceっぽいもので、 BingoCard bingoCard = new BingoCardImpl(); とか BingoCard bingoCard = new TestBingoCard(); BingoCard bingoCard = new BingoCardForHardMode(); とかに使うイメージですかね。

そのBingoCardインターフェースに数字の範囲を決めるメソッドを一つ作っておくと、 全てのBingoCardを実装したクラスは数字の範囲を決めるメソッドを持っていることが保証できますね。

使い方としてはこんなイメージです。