http://yukimura1227.blog.fc2.com/blog-entry-49.html 上記ページにSpringを使用したサンプルプログラムがあり試しに動かしてみたのですが 疑問に思ったことがあるので質問させてください。main()関数の中に SearchGoodsService searchGoodsService = appContext.getBean(SearchGoodsService.class); という記述があり戻り値の型はSearchGoodsService(インターフェース)となっています。 ここをインターフェースではなく実装クラスのSearchGoodsServiceImpl ではダメなのでしょうか。 上記ページの下部の方に 「インターフェースを使うのはSearchGoodsServiceImplにプログラムが依存しないようにするためで、 SearchGoodsServiceImplがどう変わろうが、変更の必要がない」 という趣旨の記述があります。 ここで1つ疑問なのですが 戻り値の型が実装クラスの型であっても SearchGoodsServiceImplがどう変更(メソッドが増えたり、減ったり)しても影響がないと思います。 また、戻り値の型がインターフェースであたとしてもSearchGoodsServiceという インターフェース名の変更があった場合、呼び出し元の 全てのプログラムを修正しなくてはならないと思いますがいかがでしょうか。
↧