なんか面白い話題があったので参入してみる(笑)
megascusさんの『「淡路島の電車の運行状況を聞いた話」をシステム開発に置き換えてみるはただの設計ミス』
僕は淡路島がget路線()メソッドを持っていても良いと思うんだよね。
淡路島クラスが地域インターフェースを持っているとして、地域インターフェースは以下の様になると考える。
public interface 地域 {
public 鉄道路線 get鉄道路線();
public バス路線 getバス路線();
public 航空路線 get航空路線();
public 船路線 get船路線();
}
この場合、地域によっては特定の路線が無いことも当然ありうるので、無いことを示す値(nullなりNullObjectなり)を仕様として決めて、呼び出す側がそれをチェックするのは当然だと思う。
ちなみにこれがScalaだと、(Scala初心者としては)以下の様にするかな。
trait 地域 {
def get鉄道路線() : Option[鉄道路線]
def getバス路線() : Option[バス路線]
def get航空路線() : Option[航空路線]
def get船路線() : Option[船路線]
}
val 運行状況 = new 淡路島().get鉄道路線().map(_.get運行状況())
→淡路島は鉄道が無いのでNoneが返る
で、地域インターフェースに各路線を全部入れるのではなく、個別のインターフェースを用意するとしたら、
public interface 鉄道路線 {
public 運行状況 get運行状況();
}
地域 t = new 淡路島();
運行状況 u = (t instanceof 鉄道路線) ? ((鉄道路線)t).get運行状況() : null;
ってするかなぁ。
ただ、こういうインターフェースを増やしていくのは、必要以上に煩雑になる感じがして嫌だな…。
ちなみに最近Eclipseプラグインの勉強をしているんだけど、Eclipseプラグインの場合はアダプターという仕組みを使うようになっている。
IAdaptable a = new 淡路島();
鉄道路線 r = (鉄道路線)a.getAdapter(鉄道路線.class);
運行状況 u = (r != null) ? r.get運行状況() : null;
ドラクエ10をやりながら10分くらいで書こうと思ったら、30分くらいかかった^^;