不可逆な型変換とインタフェース(層間型変換オブジェクト その3)
エントリ、層間型変換オブジェクト その1において、菊池さんからコメントを頂いた時の、私の返し。
>双方向変換の強制は自分はしないかなぁ…とか思ってみました。
おっしゃるとおりです。確かに双方向は無駄かもしれない、という感じはあったんですが、単方向で実装すると、仮に双方向の用途があった場合に、DataExChangeのインスタンスを2つ生成する必要があるのが嫌だっただけなんです。実際、内部で使う型コンバータは単方向で実装していますし。
菊池さんの考えも最もだが、前のエントリでもあったとおり、配列とジェネリックコレクション等、相互には変換不可能な、いわゆる不可逆な型変換のパターンがある以上、双方向のインタフェースを使うべきではないだろう。
結局、IDataExchangeインタフェースは片方向にしたほうが良いと結論、修正することにした。
public interface IDataExchangewhere S : class where D : class { void Convert(S source, D dest); S Convert(D dest); }