神のクラスをどのようにリファクタリングしますか?



How Do You Refactor God Class



解決:

ジェンガみたいです。あなたは忍耐と安定した手を必要とするでしょう、さもなければあなたは最初からすべてを作り直さなければなりません。それ自体は悪くありません。コードを破棄する必要がある場合もあります。

その他のアドバイス:



  • メソッドを引き出す前に考えてください。このメソッドはどのデータで機能しますか?それにはどのような責任がありますか?
  • 最初はgodクラスのインターフェースを維持し、新しく抽出されたクラスへの呼び出しを委任するようにしてください。結局、神のクラスは独自の論理のない純粋なファサードでなければなりません。次に、便宜上それを保持するか、破棄して新しいクラスのみを使用し始めることができます
  • 単体テストのヘルプ:メソッドを抽出する前に各メソッドのテストを記述して、機能が損なわれないようにします

「神オブジェクト」は巨大なクラス(コード行で測定)を意味すると思います。

基本的な考え方は、その関数の一部を他のクラスに抽出することです。



あなたが探すことができるものを見つけるために

  • 一緒に使用されることが多いフィールド/パラメータ。彼らは一緒に新しいクラスに移動するかもしれません

  • クラス内のフィールドの小さなサブセットのみを使用するメソッド(またはメソッドの一部)は、それらのフィールドのみを含むクラスに移動する場合があります。



  • プリミティブ型(int、String、boolean)。それらは、出てくる前に本当に価値のあるオブジェクトであることがよくあります。それらが値オブジェクトになると、多くの場合、メソッドを引き付けます。

  • 神オブジェクトの使い方を見てください。異なるクライアントによって使用される異なる方法はありますか?それらは別々のインターフェースに入る可能性があります。これらのインターフェースには、個別の実装がある場合があります。

これらの変更を実際に行うには、コマンドでいくつかのインフラストラクチャとツールを用意する必要があります。

  • テスト:(おそらく生成された)徹底的なテストのセットを用意して、頻繁に実行できるようにします。テストなしで行う変更には細心の注意を払ってください。私はそれらを行いますが、単一のIDEアクションで完全に実行できるextractメソッドのようなものに制限します。

  • バージョン管理:実際に速度を落とすことなく、2分ごとにコミットできるバージョン管理が必要です。 SVNは実際には機能しません。 Gitはそうします。

  • ミカドメソッド:ミカドメソッドのアイデアは、変更を試みることです。それがうまくいくなら。何が壊れているかに注意しない場合は、開始した変更への依存関係としてそれらを追加します。変更をロールバックします。結果のグラフで、まだ依存関係がないノードでプロセスを繰り返します。 http://mikadomethod.wordpress.com/book/