3

リファクタリングしたいメソッドがあります

基本的に、トップレベルのメソッドを抽象部分と最後の部分に分割したいと思います。問題のメソッドは、追加機能が追加されたかなりの数の場所でオーバーライドされますが、最終的には常にスーパーコールが行われます。

コードは基本的に次のようになります(すべての拡張クラスがオーバーライドするわけではありませんが、オーバーライドするクラスはこのようにします)

class Base {

public Object getStuff(String key) {
 out = //code to get data from the Database.
 return out
}

class Extended1 extends Base {
   public Object getStuff(String key) {
      if("some_non_db_value".equals(key)) {
         return "some custom stuff";
      }
      return super.getStuff(key);
    }
}

結果として私が欲しいのは次のようなものです:

class Base {

public final Object getStuff(String key) {
   out = getCustom(key);
   if(out != null) {
      return custom;
   }

   out = //code to get data from the Database.
   return out
}

public abstract Object getCustom(String key);

}

class Extended1 extends Base {
   public Object getCustom(String key) {
      if("some_non_db_value".equals(key)) {
         return "some custom stuff";
      }
      return null;
    }
}

このポイントに到達する(または近づく)ためのリファクタリングアクション(または部分的なリファクタリング)があることを期待していました。

4

1 に答える 1

3

まず、getStuff()の名前をgetCustom()に変更します。これにより、すべての拡張クラスが処理されます。その場合、Baseクラスの変更は比較的簡単です。

于 2012-08-03T09:37:05.050 に答える