3

PHP でプロジェクトを行い、それがオブジェクト指向であることを確認するように依頼されました。私は OO と PHP を行ったことがありますが、両方を行ったことはありません。

オブジェクト指向 PHP の主な利点 (継承/ポリモーフィズム以外) は、コードの編成にあるようです。それはいいです; 私はそれをやっています。しかし、すべての「オブジェクト」のインスタンスを実際に作成する必要がある場合は、行き詰まります。

私にとって (そしておそらく私はここでは素朴です)、Web アプリとは、データベース内のレコードを変更または取得するための非常に短いステートレス リクエストを作成することです。オブジェクトはリクエスト間で保持できません。したがって、データベースからデータをロードし、そのデータからオブジェクトを構築し、小さな更新を行い、オブジェクトのデータをデータベースに保存してから、オブジェクトを破棄することは、かなり無意味に感じられます。コードの読み込み/保存は、無駄に大変な作業のようです。[明確化: 処理時間ではなく、開発時間の無駄... オーバーヘッドをあまり気にしない]

もう 1 つの方法は、データベース層に適切に整理された抽象化層を提供するだけのシングルトン (または静的メソッドを持つクラス) を多数用意することです。この方法でコードを書くことは、真のオブジェクト指向とは感じられないと思います。何か足りないのですか、それともそのスタイルは問題ありませんか?

4

4 に答える 4

6

はい、OO の利点を「コード編成」として要約できます。しかし、これは (PHP だけでなく) すべての言語に当てはまります。実際にはそれ以上です。それは、データ構造とアルゴリズムについてどのように考えるか、つまり、それらが問題領域の概念にどのようにマッピングされるか、それらが互いにどのように関係するか (所有権、親子、ポリモーフィズムなど)、およびクリーンで一貫性のあるものをどのように公開するかについてです。相互にインターフェイスします (カプセル化)。これらの概念がアプリケーションに利益をもたらし、余分な開発時間と迅速でハックな手続き型ソリューションよりも重要である場合は、それを選択してください。

我慢は関係ないと思います。

「OO であることを確認する」ように求められた理由を質問する必要があると思います。これは、正当な理由のないかなり恣意的な要求のように思えます。通常、アプローチは、恣意的な気まぐれではなく、要件に最も適したスタイルでアプリケーションを作成することです...

于 2010-11-03T23:00:50.423 に答える
2

OOPは単なるプログラミングスタイルであり、アプリケーションの開発とは何の関係もないと思います。必要なのは、十分な抽象化レイヤーを提供するパターンです(例:MVC)。

私の推薦は:無脂肪です。

小さくてシンプルで、製品の最小限の実行可能なバージョンにすばやく移動できます。必要なものがすべて揃っており(Caching、ORM、CRUD、Captcha ...)、柔軟性が高いため、任意のパターンをカスタムディレクトリ階層で使用できます。

広範なドキュメントを確認してください。唯一の問題は、PHP5.3が必要なことです。それが提供するオプションと柔軟性を考えると、それは合理的だと思います。それはあなたの働き方を本当に変えます。あなたは間違いなくそれに打撃を与えるべきです。

于 2010-11-03T23:12:29.890 に答える
2

シングルトンは基本的に、名前空間シュガーが追加された単なるグローバル変数です。オブジェクトとクラスを使用したプログラミングには、単純な手続き型プログラミングでは得られない主な利点がいくつかあります。あなたが言ったように、1つは継承です。もう1つは名前空間です。ロットを単一のインクルードファイルに圧縮するコードを使用できます(コンパイルされた言語よりもPHPなどのインタープリター言語の方が意味があります)。

オブジェクトは基本的に共有状態の関数のコレクションです(ただし、シングルトンはそれをグローバル状態にします。注意してください)。ご指摘のとおり、利点は主に、呼び出しごとに明示的に渡す必要がなく、その状態が関数によって透過的に共有されることです。共有データを操作するリクエストごとにさまざまな関数があり、それらを一般的な関数セットの特殊な形式にしたい場合は、OOPがおそらく適しています。

あなたは「オブジェクト指向であることを確認する」という任務を負っているので、関数の一般的なグループ、その一般化などを検討するのに少し時間がかかります。

結局のところ、オブジェクトのセットアップ/ティアダウン時間はそれほど悪くはありません-そして、あなたが良い仕事をすれば、将来的には開発時間を節約するかもしれません。

于 2010-11-03T23:15:09.920 に答える
1

人生のほとんどのもののように、答えは中間のどこかにあります。

今日のアプリケーションは、さまざまな種類の最適化、データベースアプローチの理解の向上(大規模な開発チームにとって重要)、コードの更新の容易さ、プロジェクトに参加する人々によく知られている抽象化レイヤーのためにORM(たとえば、phpのドクトリン)を使用しています、キャッシングメカニズム、...。

静的メソッドを使用したクラスは、自分で小さなプロジェクトを実行している場合は問題ありませんが、より多くの人が進行中の場合は、より堅牢で標準化されたものが必要になります。

于 2010-11-03T23:08:53.210 に答える