消火活動2

今回の消火活動で,リファクタリングしきれないままリリースになりました.チャンスが訪れるか分からないけど,次回リファクタリング用にメモとして残しておく.

Strategyパターンの適用

これはおなじみですね.初期段階から気付いていたんだけど,いつでも出来るし後でやろうと思ってたら時間切れになってしまいました.

クラスの相互変換クラス

クラスAとクラスBは概念的には一緒なんだけど表現形式が異なっていて,相互変換する必要がありました.それでこんなクラスを作りました

public class A
{
}
public class B
{
}
public static class ABUtil
{
  public static A BtoA( B b )
  {
    A a = new A();
    // BをAに変換して...
    return a;
  }
  public static B AtoB( A a )
  {
    B b = new B();
    // AをBに変換して...
    return b;
  }
}

これをどうリファクタリングするか?というのはいろいろ考え方があると思います.ただ今回の要件に関していえば,AとBは対等な関係でなかったため以下の実装の方が素直でした.

public class A
{
}
public class B
{
  // コンストラクタ
  public B( A a )
  {
    // AをBに変換して...
  }

  public A ToA()
  {
    // B(自分自身)をAに変換
  }
}

こちらは最後の最後に気付きました.
もちろん最初の段階で設計が暗算できればよいのでしょうけど,まぁ単に自分の力量不足ということですね.それとABUtilという関数群を考えつくあたり,なんだかんだいってオブジェクト指向してないなと自己嫌悪しました.
反省orz