PHPで繰り返しハードコーディングされたループと条件を削除する

StackOverflow https://stackoverflow.com/questions/210475

  •  03-07-2019
  •  | 
  •  

質問

この質問でC#について質問されたのを見ました。PHPの回答をお願いします。 4ページのforeachループと条件を含む古いコードがあり、読み取りと追跡が難しくなっています。これをどのようにオブジェクト指向にするのでしょうか? SPL関数の使用を考えていましたが、何が関係するのかまだ完全には理解していません。

役に立ちましたか?

解決

このコードはおそらく大幅にクリーンアップされ、SPLに触れることなくOOの方向に遠くまでプッシュできます。

SPLは、foreach()などの言語構造体、count()などの組み込み関数、または配列アクセス関数(演算子[]とkey()などの関数)の通常のオブジェクトの動作を変更する場合にのみ必要です。 )など)。

クリーンアップの提案:

  • コード内で同じアクションが複数回(1回または2回以上)実行される場合、関数に分割します。このアクションを配列内のすべての要素で実行する場合は、 array_walk の使用を検討してください。何らかの理由で配列を移動できない場合は、ループを使用してください:)
  • キーと値のペアよりも複雑なセマンティックに接続されたデータのインスタンスが複数あり、関連する操作がある場合は、クラスにラップすることを検討してください。しかし、正式に文書化された連合。配列も同様にあなたに合うかもしれません。スタイルとデータのタイプに依存します。ここで重要なことは、データを扱うメソッドの構造化とドキュメントです。クラスにするかどうかは関係ありません。
  • 上記の手順を実行したら、新しく作成した関数とオブジェクトを個別のインクルードファイルに分割します。私はクラスのほとんどすべてをラップする傾向があるため、ほとんどの場合、クラスprは1つです。ファイル。しかし、一部のヘルパークラスは、メインクラスなどとファイルを共有します。その感覚をつかむことができます。

他のヒント

私があなたなら、テストコードを書くことから始めます。

リファクタリングしている機能を完全に説明する一連のテストケースを作成できる場合は、引き続き機能することを認識してコードを安全に書き直すことができます。

PHPUnit は、これから始めるのに適した場所です。

あなたが正しく理解していれば、foreachループ(など)が4ページの深さにネストされており、聞いたこのOOが役立つかどうか疑問に思っています。

確かに先に進み、ネストのレベルを減らして読みやすさを改善するためにコードをリファクタリングする必要がありますが、オブジェクト指向と混同しないでください。

OOは、データ構造を操作するコードの隣にデータ構造の定義を配置するようにコードを構造化する方法です。その主要な目標の1つは、複雑さをカプセル化して読みやすくすることですが、OOがそれを行う唯一の方法ではありません。

OOの概念をまだ理解していない場合は、コードをリファクタリングして、内部ループ内のコードを(できれば)単一の単純なタスクを持つ(できれば)個別の関数に分離する方が簡単な場合があります。

誤解しないでください。特に、開発者に設計をより効率的に議論するための高レベルの概念を提供する手法として、OOの擁護者です。オブジェクト指向は学ぶ価値があります。

ただし、OOについての知識が不足しているために、ループから内部コードを引き出して、それらを単一目的の関数に入れることを妨げないでください。

(オブジェクト指向の知識のレベルを誤解している場合、おmyび申し上げます。)

ゆっくり起動します。一度にリファクタリングします。

多数の配列をループする場合は、 array_map <のような配列関数を見てください。 / a>、 array_walk 、および友達。これは、オブジェクト指向リファクタリングよりも機能的なリファクタリングですが、かなり遠くまで運ぶことができます。 OOを増やすことが理にかなっている場合、必要に応じて適切なクラスにプッシュできる関数がいくつかあります。

Johnathanとgnudからの良いアドバイス。 SPLについてはあまり心配しないでください。リファクタリングの詳細 PHPで利用可能なリファクタリングツールをご覧ください。

また、レガシーコードを効果的に使用する

 alt text

もちろん、正規のリファクタリングブック

代替テキストhttp://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

PHPは、コードの臭いをきれいに保つのが難しい言語ですが、少しの忍耐でそれを行うことができます!そして、あなたはあなたのコードベースを見なければならない毎日に感謝します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top