2

最近の読書では、カプセル化の方法と OOP のベスト プラクティスに関する推奨事項が矛盾していることに気付きました。

複数のソース システムから最終的な宛先にデータを転送および変換するために使用される一連の PHP クラスの開発を開始しています。したがって、最初のクラスのプロパティには、ソース URL と認証値が含まれます。

拡張の可能性が無限にある長期プロジェクトに最適なのは、次のうちどれですか?

  1. パブリック プロパティとして宣言します。クラスを構築するときに、各ソースに外部から値を設定します。長所: シンプル。短所: カプセル化の利点がない

  2. __get と __set を使用します。ソースごとに外部から値を設定します。長所: OOP 規則に従います。短所: すべてを外部アクセスに開放します。繰り返しますが、カプセル化はありません

  3. プロパティを保護されていると宣言します。作業が必要なソース システムごとに、元のクラスを拡張し、サブクラスのプロパティを設定します。Pro:カプセル化による OOP。短所: 管理するクラスが増え、場合によってはファイルが増えます。

ファイルのオーバーヘッドはあるものの、現時点ではオプション 3 が最適なようです。私は他のアイデアにもオープンです。

この質問について私が読んだ参考文献:

http://典型的なプログラマー.com/?p=23

ゲッターとセッター?

http://www.php.net/manual/en/language.oop5.overloading.php

独立したゲッター/セッター メソッド、または組み合わせ?

http://martinfowler.com/bliki/GetterEradicator.html

OOP で get メソッドと set メソッドを作成する価値はありますか?

4

2 に答える 2

5

少なくとももう 1 つのオプションがあります。構築時にこれらのパラメーターをオブジェクトに注入し、getter を介して読み取り専用の「プロパティ」にします。ファクトリを介してのみオブジェクトを構築します (これを強制することもできますが、そうすることに具体的な利点があるかどうかはわかりません)。

ファクトリは起動時に構成でき (これはプラスになる可能性があります)、トランスポートのクラスは 1 つしかなく、コンシューマーは各トランスポートの状態を公開するために選択した方法 (カプセル化) でのみ表示できます。

于 2012-08-30T18:53:59.637 に答える
2

選択肢 3 ですが、実際には非公開にする必要があります。(リストした 3 つ以外にもオプションがあることに注意してください。これは必ずしも最適ではありませんが、決定するのに十分な情報がありません。) 他の 2 つのオプションはどちらも、拡張可能な OOP アプリケーションの開発には特に役立ちません。 .

于 2012-08-30T18:53:10.027 に答える