マインドマップ
はじめに
関数を再編成するための上記の PHP チャット「リファクタリング - 既存のコードの設計の改善」に引き続き、リファクタリングについて話します。
専門用語
代表者: 代表者
カプセル化:カプセル化
紹介します:
を紹介します
はじめに
「責任の所在を決める」 - リファクタリングを使用して元の設計を変更します。
説明:
1. クラスは多くのことを引き受けすぎて肥大化しています - 抜粋 クラスはいくつかの責任を分離します。
2. クラスは無責任です - インラインクラスはクラスを別のクラスに統合します。
3. クラスは別のクラス - 非表示デリゲートを使用して関係を非表示にします。
4. (3) デリゲートのクラスが頻繁に変更される - 中間担当者を削除します。
移動メソッド
あるクラスのメソッドが別のクラスと頻繁に通信する場合は、別のクラスで同様の関数を備えた新しい関数を作成するか、古い関数を単純な委任メソッドに変えるか、古い関数を削除します。
クラス図:
動機:
1. クラスが別のクラスと高度に結合している場合は、メソッドを移動します。 ——クラスは、システムによって提供されるタスクを実装するために、よりシンプルかつクリーンです。
2. 一部の値フィールドを移動する場合は、別のクラスの使用回数が常駐オブジェクトの使用回数より大きいかどうかを確認します。
フィールドを移動
状況: クラス内のフィールドは、別のクラスによってさらに使用されています。次に、別のクラスに新しいフィールドを作成し、古いフィールドを変更します。
クラスの抽出
状況: 1 つのクラスが 2 つのクラスが行うことを実行してから、新しいクラスを作成し、関連するフィールドとメソッドを古いクラスから新しいクラスに移動します。
インラインクラス
状況: クラスの1つがあまり何もしていない(十分な責任を負っていない)ため、クラスのすべての機能を別のクラスに移動し、元のクラスを削除します。 。
動機: インラインクラスは、抽出クラスの反対です。 ——クラスの抽出の例を逆にします。PhoneNumberは、codeとnumberを読み取るためにのみ使用されるためです。
代理人を非表示にする
状況: お客様は、Server オブジェクトのMethodのDelegateクラスを直接呼び出し、Server上でお客様が必要とする関数Methodを作成します。 側でデリゲート関係を非表示にします。
オブジェクトテクノロジーを学んだことのある人なら、phpではfieldをpublicとして宣言できますが、field(private)も非表示にする必要があることを知っています。経験が増えるにつれて、カプセル化するものが増えます。
以下の例を見てください:
$person->getDepartment()->getManager() は明らかに、Xiaocai のリーダーを見つけたい場合は部門を通過する必要があることを明らかにしているため、私たちがしなければならないのは部門を非表示にすることです。 ——カップリングを軽減できる。
仲介者を削除
状況: クラスが多すぎる単純なデリゲートを実行する場合、デリゲートクラスを直接呼び出します。
動機: Hide Delegateの例では、Departmentにさらに新しいメソッドがある場合、Hide Delegateを行うために、対応するメソッドをpersonに追加する必要があります。メソッドは次のとおりです。 デリゲートに使用されます。この時点で、人は完全に中間者になっています。この時点で、Delegateクラス——Departmentを直接呼び出す必要があります。
リファクタリングの意味は、問題を解決する限り、「申し訳ありません」と言う必要はまったくないということです。
外国のメソッドを紹介します
状況: PreviousEnd クラスには、Client クラスが使用する必要がある追加の関数がありますが、このクラス PreviousEnd は変更できないため、Client で関数を作成し、PreviousEnd エンティティをパラメータとして受け取ります。
まとめ
「クラスの抽出」と「クラスのインライン化」、「デリゲートの非表示」と「中間者の削除」はすべて逆のプロセスであることに注意してください。具体的に理解するには、序文のフローチャートを参照してください。
「Hide Delegate」は少数の「Delegate メソッド」を使用する場合によく使用され、「Remove Middle Man」は多数の「Delegate メソッド」を呼び出す場合に使用されます。Delegate クラスを直接使用して呼び出すこともできますが、一部の Delegate メソッドは予約されています。必要に応じて一部分。
「抽出クラス」と「インラインクラス」ですが、「抽出クラス」は責任が重すぎて肥大化してしまったクラスによく使われ、「インラインクラス」は現在のクラスが「無責任すぎる」使い方をしているときによく使われます。 ——個人的には「インラインクラス」よりも「抽出クラス」の方が好きです。
川山賈より抜粋