1

他のいくつかの親オブジェクトとして機能するオブジェクトがあります。これには、次のようなメソッドがあります。

class Parent
  def commit
    begin
    ...
    rescue => e
    ...
    end
  end
end

class ChildA < Parent
end

class ChildB < Parent
end

ただし、特定の種類のエラーがスローされたChildA場合は、独自の方法で動作する必要があります。その関数のファイル全体を上書きすることもできますが、それは厄介です。セクションの本文を変更する必要がある場合、問題が発生します。これは、2 つの場所で変更する必要があるためです。commitUniqueErrorcommitbegin

これをリファクタリングする最もクリーンな方法は何ですか?

4

1 に答える 1

4

. ですべての種類の例外を飲み込むべきではありませんrescue => e。そのコード行はほとんど存在しないはずです。例外ハンドラーは、意味のある回復が可能な種類の例外のみをキャプチャする必要があります。

すべての例外を飲み込まないように親を変更し、子クラスでそれらをキャッチします。

class Parent

  def commit
    # ...
  end 

end

class Child < Parent
  def commit
    begin
      super
    rescue UniqueError => e
      # ...
    end
  end
end
于 2013-09-24T02:59:09.207 に答える