2

この質問がC#について尋ねられたのを見ました。PHPについての回答が欲しいです。4 ページの foreach ループと条件を含む古いコードがいくつかあるため、読みにくく、従うのが難しくなっています。これをもっとOOにするにはどうすればよいですか?私は SPL 関数を使用することを考えていましたが、何が関係しているのかまだ完全には理解していません。

4

5 に答える 5

3

このコードはおそらく大幅にクリーンアップされ、SPL に触れずに OO の方向に大きく進む可能性があります。

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

クリーンアップの提案:

  • コード内で同じアクションが複数回 (1 回または 2 回以上) 実行される場合は、関数に分割します。このアクションを配列内のすべての要素に対して実行する場合は、array_walkの使用を検討してください。配列のウォークが何らかの理由で収まらない場合は、ループを使用してください:)
  • キーと値のペアよりも複雑な、意味的に接続されたデータのインスタンスがいくつかあり、操作が関連付けられている場合は、それをクラスにラップすることを検討してください。しかし、正式に文書化された協会。配列もあなたに合うかもしれません。スタイルとデータの種類によって異なります。ここで重要なことは、データを操作するメソッドの構造化とドキュメントです。クラスにするかどうかはあまり関係ありません。
  • 上記の手順を実行したら、新しく作成した関数とオブジェクトを個別のインクルード ファイルに分割します。私はクラスでほとんどすべてをラップする傾向があるので、ほとんどの場合、1 つのクラス pr を持っています。ファイル。しかし、いくつかのヘルパー クラスはメイン クラスなどとファイルを共有します。

于 2008-10-16T22:48:48.903 に答える
2

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

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

PHPUnitは、これを始めるのに適した場所かもしれません。

于 2008-10-17T10:18:48.903 に答える
0

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

コードをリファクタリングしてネストのレベルを減らし、可読性を向上させる必要がありますが、それをオブジェクト指向と混同しないでください。

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

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

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

ただし、OO に関する知識が不足しているからといって、内部コードをループから引き出して、単一目的の関数に組み込むことをやめてはなりません。

(OO の知識のレベルを誤解していた場合は、申し訳ありません。)

于 2008-10-17T10:41:00.323 に答える
0

ゆっくり始めます。一度に1つずつリファクタリングします。

array_map多数の配列をループしている場合は、 、array_walk、および friendsなどの配列関数を見てください。これは OO リファクタリングというよりも機能的なリファクタリングですが、かなりのことを実行できます。 オブジェクト指向をさらに進めることが理にかなっている場合は、必要に応じて適切なクラスにプッシュできる関数がいくつかあります。

于 2008-10-16T22:21:42.750 に答える
0

Johnathan と gnud からの良いアドバイス。SPL についてあまり心配する必要はありません。リファクタリングについて詳しく学び、PHP で使用できるリファクタリング ツールを調べてください。

また、十分に読むことはお勧めできませんレガシーコードを効果的に使用する

代替テキスト

そしてもちろん、正規のRefactoring Book :

代替テキスト 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 は、コードの臭いを完全に取り除くのが難しい言語ですが、少しの忍耐力でそれを行うことができます! そして、コードベースを見なければならない毎日に感謝します。

于 2008-10-17T04:37:46.687 に答える