まず、私がこれまでに接したいくつかの古いプロジェクトの経験について話させてください。古いプロジェクトの場合、最初の接触プロセスでは、ほとんどの人が常に抵抗感を抱き、一部の人は軽蔑さえします。私はいつも、以前のコードに多くの問題を見つけてから、コードや以前の開発者について不満を言い始めるのが好きですが、憂鬱な苦情が続いた後、私は専門的な責任感を持ち、すべてを変えたいと考えています。良いと思う方法では問題が解決したので、次の仕事はコードをリファクタリングすることです。
おそらくほとんどの開発者はこれを経験したことがあると思いますが、この経験は苦いものです(なぜならリファクタリングは重要であるにもかかわらず、あまり評価されていないからです。現在、国内ではユーザビリティが重視されており、コードの品質は注目されていません。人々はそれに注目します)そしてそれはまた甘いものでもあります(嵐の後には必ず虹がかかります)。若い開発者にとって、虹を見るまでのプロセスは苦痛で長いものです。彼らは皆、経験に加えて、失敗を通じて成長します。これらの失敗は主に、成功を達成することに熱心すぎて、やみくもに再構築することが原因です。
視覚障害は主に以下に反映されます:
1. システム アーキテクチャ全体を明確に理解する前に、それを新しいテクノロジまたはアーキテクチャと考えられるものに置き換える必要があります。
2. 既存のシステムアーキテクチャやプログラムの欠点をまったく分析せず、ただ闇雲にデザインパターンについて話し、固有のデザインパターンのセットで再構築します(再構築では、それは参照としてのみ使用され、Aは使用されません) )
3. リファクタリングは比較的カジュアルで、各バージョンの開発はアーキテクチャを超えて、新しい設計アイデアを自由に取り入れます。
この種のやみくもな再構築は、システムにさらなる問題をもたらすでしょう:
リファクタリングを行うと、システムの運用効率が低下することがわかります。
システムを完全に理解していないため、リファクタリングに多くの重複コードを持ち込んでいます。
最も悲劇的なのは、リファクタリングされたコードが他の人からもゴミとみなされ、リファクタリングされてしまうことです。
それでは、どうすれば失明をなくすことができるのでしょうか。 ?
まず、現在のプロジェクトに問題があるかどうか、どのような問題があるのか、そしてそれらの問題が再構築によって解決できるかどうかを理解し、再構築する時間を会社から与える必要があります。上司はあなたのせいでそれをするわけではありません。強い依存性と偶然性の低さについては、問題を通してのみ上司に知らせる必要があり、あなたの仕事は問題を通してのみ得られるということです。これは非常に現実的な状況です。
次に、リファクタリング オブジェクトがアーキテクチャ用かローカル コード用かを判断し、理想的な目標を設定する必要があります (なぜ理想的なのか? 1 つのステップで正しく行うことはできないため、理想と現実の間にはギャップがあります) , しかし、私たちがしなければならないのは、理想に近づくために最善を尽くすことです)。
アーキテクチャをリファクタリングしている場合、これは簡単な作業ではありません。実際に始める前に、次のことを行う必要があります。
1. 以前のアーキテクチャ/技術的背景やビジネス要件を含む、システムの過去に関する包括的な理解
2. 保守性の低さ、既存のニーズを満たさなくなった側面など、以前のアーキテクチャの問題を分析します。
3. コア コードの少なくとも 80% を確認する。以前のコードに基づいて、一定期間実際のコーディング経験があることが最善です。
上記の点を行う目的は、明確に理解し、自分自身と敵について知ることです。次は実質的な段階に入ってもいいでしょうか?いいえ、非常に重要なことがまだ 1 つありません。それは再建計画です。
この種の大規模なリファクタリングでは、実際の状況では、通常、上司から与えられた時間と実際にリファクタリングに必要な時間は大きく異なるため、リファクタリング作業を後で遅らせる必要があります。再構築と新しい要件の開発が必要であり、この作業は 1 人の作業ではなく、複数の人の協力が必要となるため、共通の目標に加えて、一定のレビューのメカニズムも必要です。リファクタリングの方向が一貫していることを確認するなど。これらの要素の下でリファクタリングを適切に行うことが、リファクタリング計画が必要な理由です。
ローカル コードをリファクタリングする方がはるかに簡単かもしれませんが、注意する必要があるのは、既存のアーキテクチャの考え方に従い、その範囲内で考える必要があるということです。
これを行うには非常に重要な考え方があります:
1. 物事の本質とは何か、物事の外部環境は何かを分析するのが得意です。
2. さまざまなものの中から共通点を見つけ、その共通点を抽象化します (簡単な例を挙げると、BMW とアウディの場合、それらを車に抽象化する必要があります)。
なぜこんなことを言うのかというと、これらはコードのリファクタリングに必要なものをもたらす可能性があるからです:
1. コードの作成プロセスにおける依存関係を削減します。
2. 抽象的なものは再利用可能です
上記をすべて実行すると、リファクタリングが完了したことになります。不可能です。これは良いスタートにすぎません。アジャイルで述べたように、継続的なリファクタリングを実現する必要があります。
プロジェクトマネージャーは各バージョンサイクルにこの時間を与えないので、それは非現実的だと考える人もいるかもしれません。実際、私は混乱しています。 ! 1 週間以上かかると予想している場合、リファクタリングにこれほどの時間がかかることに同意する人はいないでしょう。本当に必要です。それは、あなたの初期の設計が非常に貧弱であることを意味します。非常に狭い範囲の変更に限定されているため、所要時間は 2 日程度であると考えています。
これをうまく実行できれば、プロジェクトは非常に保守しやすくなるはずです。これは理想的なことではありませんが、一貫して実行する限り、実際には非常に簡単です。
上記はリファクタリングに関する私の個人的な考えの一部であり、言葉だけでは空虚に見えるかもしれませんが、後で参考とコミュニケーションのために実際のリファクタリングの事例をいくつか紹介します。
アーキテクチャのリファクタリング:
1.再建計画
2.交差部分を抽出するアルゴリズム
3. オブジェクトのレプリケーションを簡単かつ柔軟に実装します

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません
