不可逆な型変換とインタフェース(層間型変換オブジェクト その3)

エントリ、層間型変換オブジェクト その1において、菊池さんからコメントを頂いた時の、私の返し。

>双方向変換の強制は自分はしないかなぁ…とか思ってみました。
おっしゃるとおりです。確かに双方向は無駄かもしれない、という感じはあったんですが、単方向で実装すると、仮に双方向の用途があった場合に、DataExChangeのインスタンスを2つ生成する必要があるのが嫌だっただけなんです。実際、内部で使う型コンバータは単方向で実装していますし。

菊池さんの考えも最もだが、前のエントリでもあったとおり、配列とジェネリックコレクション等、相互には変換不可能な、いわゆる不可逆な型変換のパターンがある以上、双方向のインタフェースを使うべきではないだろう。

結局、IDataExchangeインタフェースは片方向にしたほうが良いと結論、修正することにした。

public interface IDataExchange
    where S : class
    where D : class
{
    void Convert(S source, D dest);
    S Convert(D dest);
}