堅実な原則PHP:違反の例で説明します。
堅実な原則PHP:違反の例で説明します。
確固たる原則は、ソフトウェアデザインをより理解しやすく、柔軟で、保守可能にすることを目的とするオブジェクト指向プログラミングの一連の設計原則です。 PHPでは、これらの原則は、Web開発での広範な使用のために特に関連しています。各原則を分解し、違反の例を提供しましょう。
-
単一責任原則(SRP) :
- 定義:クラスには変更する理由が1つしかない必要があります。つまり、1つのジョブのみが必要です。
-
違反の例:ユーザーデータ、認証、電子メールの送信を処理する
User
クラスを検討してください。クラスには複数の責任があるため、これはSRPに違反します。電子メールシステムを変更する必要がある場合、ユーザー管理について他に何も変更する必要がなくても、User
クラスを変更する必要があります。
-
オープン/クローズド原理(OCP) :
- 定義:ソフトウェアエンティティ(クラス、モジュール、関数など)は、拡張機能のために開かれている必要がありますが、変更のために閉じている必要があります。
-
違反の例:クレジットカードを介して支払いを処理する
PaymentProcessor
クラスがあるとします。 PayPalを新しい支払い方法として追加したい場合、既存のPaymentProcessor
クラスを変更する必要がある場合、これはOCPに違反します。代わりに、既存のコードを変更せずにクラスを拡張するか、多型を使用して新しい支払い方法を追加する必要があります。
-
リスコフ代替原理(LSP) :
- 定義:プログラム内のオブジェクトは、そのプログラムの正確性を変更することなく、サブタイプのインスタンスに置き換えることができます。
-
違反の例:
setWidth
とsetHeight
メソッドを備えたRectangle
クラスと、Rectangle
を伸ばすSquare
クラスを想像してください。Square
の上昇setWidth
を上書きして高さを設定する場合、Rectangle
が予想されるSquare
のオブジェクトを使用して、予期しない動作につながり、LSPに違反する可能性があります。
-
インターフェイス分離原理(ISP) :
- 定義:クライアントが使用しないインターフェイスを実装することを強制されないでください。
-
違反の例:Methods
print()
、scan()
、およびfax()
を含むIMachine
インターフェイスがあるとします。IMachine
実装しているがprint()
のみを必要とするBasicPrinter
クラスを作成すると、ISPに違反して未使用の方法があります。
-
依存関係反転原理(DIP) :
- 定義:高レベルのモジュールは、低レベルモジュールに依存してはなりません。どちらも抽象化に依存する必要があります。さらに、抽象化は詳細に依存してはなりません。詳細は抽象化に依存する必要があります。
-
違反の例:
ReportGenerator
クラスがFileWriter
直接インスタンス化してレポートをファイルに書き込む場合、ReportGenerator
コンクリートクラス(FileWriter
)に依存するため、これはDIPに違反します。代わりに、IWriter
インターフェイスのような抽象化に依存する必要があります。
PHPに強固な原則を適用する際に開発者が犯す一般的な間違いは何ですか?
- オーバーエンジニアリング:開発者は、あまりにも多くの小さなクラスまたはインターフェイスを作成することがあり、複雑さが増加し、メンテナンスが難しくなります。責任を打ち破ることは良いことですが、実際のニーズとバランスをとる必要があります。
- 現実世界の制約を無視する:時には、パフォーマンス要件やプロジェクトのタイムラインなどの実際的な考慮事項が、堅実な原則への厳密な順守と矛盾する場合があります。開発者は、現実世界の制約よりも強固な原則を優先するという間違いを犯すかもしれません。
- 原則の誤解:たとえば、一部の開発者は、SRPがクラスに1つの方法しか持っていないことを意味すると考えるかもしれませんが、これは正しくありません。変更する1つの理由であり、必ずしも単一の機能ではありません。
- 依存関係の注入を使用しない:開発者は、DIPに反する依存噴射を使用する代わりに、多くの場合ハードコード依存関係を依存します。これにより、コードの柔軟性が低下し、テストが難しくなります。
- リファクタリングを無視する:堅実な違反が特定されている場合でも、開発者は時間の制約やバグを導入する恐れのためにコードをリファクタリングしない可能性があり、技術的な負債につながる可能性があります。
PHPコードの強固な原則の違反をどのように識別できますか?
- コードレビュー:定期的にレビューコードは違反を特定するのに役立ちます。複数の責任、ハードコーディングされた依存関係、またはクライアントが使用していない方法に依存せざるを得ないクラスを探してください。
- 静的コード分析ツール:PHPSTANやPSALMなどのツールは、特定のコーディング標準に対してコードを分析し、ハードコード化された依存関係を検出することにより、DIPなどの原則の違反を特定するのに役立ちます。
- ユニットテスト:ユニットテストを書くことで、特にLSPの違反が明らかになる可能性があります。サブタイプを置き換えるときにテストが失敗した場合、違反を示す可能性があります。
- 依存関係分析:クラスの依存関係をマップできるツールは、高レベルのモジュールが低レベルのモジュールに直接依存する場所を示すことにより、DIPの違反を特定するのに役立ちます。
- コードの臭い:SRPまたはOCPの違反を示すことができる長い方法、大規模なクラス、スイッチステートメントなどのコードの臭いを探します。
確固たる原則に違反するPHPコードをリファクタリングするには、どのような措置を講じる必要がありますか?
- 違反を特定する:上記の方法を使用して、違反が発生する場所を特定します。
- リファクタリングを計画します:必要な変更を決定します。 SRPの場合、これは大きなクラスを小さなクラスに分割することを意味するかもしれません。 DIPの場合、インターフェイスを導入し、依存関係噴射を使用することが含まれる場合があります。
-
変更を実装します:
- SRPの場合:クラスを複数のクラスに分解し、それぞれが単一の責任を負います。
- OCPの場合:多型を使用するか、既存のコードを変更せずに機能性を拡張するために新しいクラスを導入します。
- LSPの場合:プログラムの正確性に影響を与えることなく、サブタイプが基本タイプに置き換えることができるように動作するようにします。
- ISPの場合:大きなインターフェイスをより小さく、より焦点を絞ったインターフェースに分割します。
- DIPの場合:抽象化(インターフェイス)を導入し、依存関係注入を使用して高レベルと低レベルのモジュールを切り離します。
- テストの書き込み:リファクタリングの前後に、単体テストを書き込み、変更が既存の機能を破らないようにします。
- 反復と改良:リファクタリングは、多くの場合、反復プロセスです。変更を行った後、コードをもう一度確認して、堅実な原則と一致し、新しい違反を導入しないことを確認してください。
- 継続的な改善:コードレビューや継続的な統合などのプラクティスを採用して、コードベースを時間の経過とともに固体原理と整列させます。
これらの手順に従うことにより、PHPコードを効果的にリファクタリングして、堅実な原則により密接に遵守し、保守性と柔軟性を向上させることができます。
以上が堅実な原則PHP:違反の例で説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

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

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事
Oguri Cap Build Guide |かなりのダービーズメソム
4週間前
By Jack chen
Agnes Tachyonビルドガイド|かなりのダービーズメソム
3週間前
By Jack chen
グラスワンダービルドガイド|ウマゴサメはかなりダービーです
3週間前
By Jack chen
KB5060829を修正する方法インストールとその他の報告バグ
4週間前
By DDD
<🎜>:森の99泊 - すべてのバッジとそれらのロックを解除する方法
2週間前
By DDD

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Java チュートリアル
1794
16


CakePHP チュートリアル
1740
56


Laravel チュートリアル
1591
29


PHP チュートリアル
1474
72


NYTミニクロスワードの回答
267
587

