マインドマップ
はじめに
私が上司と呼ばれるのは、私の立場が私より高いからだけではなく、私のスキルが素晴らしいからでもあります。
今日はコード構造の問題のいくつかについて上司に話すつもりです。そのうちのいくつかはあなたにとって役立つかもしれません。異なる意見がある場合は、それを提案して一緒に議論することができます。
ダイアログ
1>1 つのファイルが巨大 (5000 行以上)
私: ファイルのアセンブリはパフォーマンスに影響しますか? PHP 言語はソース ファイルを処理するとき (これは主に PHP の字句解析と構文解析です)、ソース ファイルを 1 つずつトークンに分割します。ファイルが大きい場合、現時点では必要のないメソッドがすべてマークされますが、これは明らかにパフォーマンスに影響を及ぼしませんか?
上司: これによるパフォーマンスへの影響は比較的小さいです。パフォーマンスを考慮する場合、たとえば、ページを表示するときにページを開くのが非常に遅い場合、最初に考慮するのはファイル サイズではなく、各モジュールの読み込み速度です。たとえば、ブレークポイントの設定を通じて、特定の製品リストの読み取りが比較的遅いことがわかりました。次に、データの組み立てが遅いのか、それともインターフェイス (データベースまたは中間) からのデータの読み取りが遅いのかを検討する必要があります。データの組み立てが遅い場合は、アルゴリズムを再構築するか、計画を変更できるかどうか製品担当者と話し合う必要があります。インターフェースのデータ読み取りが遅い場合、問題を解決するにはマシンまたはインデックスを追加する必要がありますか? ——つまり、パフォーマンスの問題を検討するときは、小さな問題に焦点を当てるのではなく、パフォーマンスに最も影響を与える領域の変更を検討する必要があります。私: 大きなファイルのクラスを複数のクラスに分割することの何が問題なのでしょうか?
上司: メソッド本体に大量の require_once を介して大量のクラス ファイルを追加すると、パフォーマンスにも影響が出るのではありませんか? -- require_once 自体もパフォーマンスを消費します。
私のために絵を描いてくれました (上の絵に似たもの):
私: それなら、 include を使ってファイルを論理的にロードしたり、条件付きでファイルをロードしたりできます。これにより、ロードするファイルの数が減ります!
上司: では、条件に応じてどのようにロードするのですか?
私:たとえば、映画の場合は映画関連の番組ファイルを読み込み、テレビの場合はテレビ関連の番組ファイルを読み込みます。
上司: 将来、テレビが映画のコンテンツを使用する場合はどうしますか? または、多くのカテゴリがあなたの映画カテゴリのコンテンツを使用する場合はどうしますか?
私: それから、「」コードをたくさん入れます (if('Movie' === $category 'TV' === $category 'Music' === $category){} など)。 後で考えてみると、確かにこれを行うと、1 つのメソッド内にそのような if ステートメントが多数存在することになり、特定のカテゴリのコンテンツに対応させたい場合は、大量の if ステートメントを参照する必要があります。 if ステートメント。一緒に書くか、コードをリファクタリングする方が本当に良いです!
2>autoload()メソッド。
以下のコードに似ています。
テスト::getName();
関数 __autoload($className){
echo $className,"n";exit();
}
実行結果:
私: __autoload メソッドのパフォーマンスがあまり良くないと思うので、他のモジュールを呼び出すときは include メソッドを使用します。
上司: これを行うと、第一に、コード全体がそれほど標準化されていないように見えます。第二に、将来フレームワークを変更する必要がある場合、そのようなコード ファイルをすべてチェックする必要があります。たとえば、エントリ ファイルが次のようになります。次に、Test.class.php ファイルがどこにあるかご存知ですか?
__autoload() メソッドを呼び出す場合、すべてのクラス呼び出しがこのメソッドを経由するため、このインターフェイスを変更するだけで済み、管理が容易になります。
3> メソッドは 1 画面内に収め、1 行あたり 80 文字以内にしてください。
私: 私たちのクラスのメソッドは長すぎると思います。その多くは現在のメソッドを読み取るのに数画面以上かかります。個人的には「メソッドを 1 つの画面にまとめてみる」「1 つのメソッドに 1 つのことをさせる」のが好きです。非常に長いメソッドを見ると頭が痛くなることがあります!
ボス:
メソッドとは、test() メソッドのように、test() を実行するだけで 1 つのことを実行することです。以前、PHP がオブジェクト指向ではなかったとき、すべてのコードを
に記述することが多かったのではないでしょうか?「メソッドを分割するためにメソッドを分割するのではなく、ビジネス ニーズのためにメソッドを分割する必要があります。」さらに、関数呼び出し自体がパフォーマンスとメモリを消費することがわかっています。メソッド本体の一部を他のメソッドから呼び出す必要がある場合は、コードのこの部分をメソッドにすることができます。メソッドが他のクラスのメソッドを多数呼び出す場合は、1 つのメソッドで記述したほうが直感的です。
4> 以前に削除されたコードを取得します。
私:製品のある機能の削除を要求したのに、時間が経つと再度その機能の追加を要求されます。では、元のコードを削除するべきでしょうか? それともコメントを作成するだけでよいでしょうか?
上司: 削除してください。
私: 元のコードをバックアップする必要がありますか?
上司: 回復にはバージョン管理ソフトウェアを使用できます。 svn など。
デモの例:
(1)初期コード
SVN 提出コード:
(2) 製品にはオフライン コードが必要です
SVN 提出コード:
(3) 一定時間が経過すると、製品はモジュールを再度オンラインにする必要があります。
SVN 操作: 最初にログをクエリし、次にログをマージします
概要
上記の問題に遭遇したと思いますので、励ましを共有してください。
余談:1年間勤めた会社を辞める時、プロジェクトマネージャーから「頻繁に転職すると将来の発展に悪影響を与える」と言われたが、それがどうなるかは教えてくれなかった。というのは、私がこれまでに勤めた会社の多くの高度なスキルを持った人材は、その会社に 3 年以上勤務しているからです。一つの会社に長く勤めれば、スキルアップにつながると思います。
1》コードを継続的にリファクタリングして、コードの品質を向上させます。
私たちが会社に入社したときは、たいてい、会社が急務で人手不足のプロジェクトを抱えているときです。プロジェクトが完了するまでには通常約 1 年かかります。会社に長く勤めていれば、このプロジェクトは多かれ少なかれあなたに関わることになるでしょう。あなたはコードを書き続けるのと同じように、常にコードを確認し、常にコードを調整し、コードをリファクタリングし続けることになります。記事を作成すると、自分が書いた記事を見続け、修正を加え続けることになり、記事を修正すればするほど、その記事が好きになります。
2》ビジネスに精通し、より速く、より適切なコードを書くことができます - 個人的には、「流れる雲と流れる水」の感覚が好きです。
会社に長く勤めている人であれば、この分野には精通しているでしょう。新しい要件が発生した場合、コード構造の作成方法がすぐにわかります。たとえば、メソッド内のどのコード部分を抽出して独立してメソッドに作成できるかがわかります。今後頻繁に変更されます。 ——スムーズに流れるようにコードを書きましょう!