1

私たちのチームでは PHP で ORM を使用しており、2 つの別々のプロジェクトで、優れた MVC 設計について具体的に詳しく説明しましたが、ORM によってビューから DB クエリを実行できるようになっているように見えることに注意しました。層と保守が困難なコードの作成。

私は、ORM を使用すると、プログラマーが考えていない裏でクエリを作成するのが簡単すぎるという意見に傾いています。ORM オブジェクトをビュー レイヤーに返すことで、プログラマーは基本的に、データベース接続を必要のないレイヤーにリークさせます。

ここでORMについて正しく考えていますか? もしそうなら、なぜそんなに人気があるのですか?正しく考えていない場合、これらの問題にどのように対処すればよいですか?

4

3 に答える 3

5

あなたはそれについて正しく考えていないと思います。ORM 自体は悪い慣行を助長するものではありません。少なくとも、あなたが経験している方法ではそうではありません。

ORM はツールであり、他のフレームワーク、API などと同様に、正しく使用することも使用しないこともできます。

問題は、チームの開発者が MVC パターンを明確に理解していないことにあるようです。まず、その問題に対処することから始めます。

開発者がビューとコントローラーを使用してはならないことを行う傾向があるのは、MVC パターンの非常に一般的な問題だと思います。理由はたくさんあるかもしれませんが、このような作業をするときはいつでも、問題は通常、次のような考えから始まると思います。

「そんな簡単なことじゃなくて、ここでやってみよう。あちらこちらでやっても意味がないよ。」

基本的に、デザインとビジネス ロジックを分離しようとすると、実際にはビジネス レイヤーに属する部分をプレゼンテーション レイヤーに実装する方が簡単な場合が常にあります。開発者が悪いというわけではありませんが、経験不足や怠惰を示している可能性があります。私は、Android向けに開発するときのように、これとまったく同じことで何度か罪を犯したことを知っています(ただし、専門的にはありません:))。

あなたが気づいたいくつかの悪い慣行を使用するいくつかのサンプルケースを見つけ出し、チームとしてそのコードを適切に実装し、時間がある場合は示すコーディング道場を用意してみてはどうでしょうか。それらが属するものを持つことの実際の利点。自分で書いた場合、またはそのコードを担当する開発者が他の開発者の前で混乱しても問題ない場合を除き、実際のコードを使用しないことを強くお勧めします。しかし、これは明らかにあなたの会社の文化と、開発者がこの種のことに興味を持ち、オープンであるかどうかによって異なります。個人的には、自分の職場にも同様のものがあればいいのにと思います。

于 2013-03-11T01:02:39.023 に答える
2

ビューレイヤーで小さなORM呼び出しを行うことが必ずしも悪いことかどうかはわかりません。たとえばforeach (Category::getAll() as $Category):、ページにカテゴリを一覧表示するループがあるとします。接続は、ORM によってカプセル化されているため、ビューのスコープに漏れることはありません (または、いずれにせよ、そうすべきではありません)。この呼び出しの結果をコントローラーに代入し、オブジェクトの配列をテンプレートに渡すこともできます (より複雑な呼び出しの場合は確実にそうします) が、些細なケースはビューで問題ありません。

私の経験では、ORM の最大の問題は、"n+1" のデータベース クエリ数の増加です。通常、画面上の 1 対多のリストは 1 つのクエリからレンダリングできますが、ORM を使用すると、1 つのテーブルでプライマリ ループを使用してから、セカンダリ テーブルの各インスタンスに対して個別に選択を行うことが非常に便利になります。これは非効率的ですが、対処しなければならないクエリの数が増えてデータベースがきしみ始めたときに初めて気付くでしょう。

これに対する最善の防御策は、開発者に開発者モードでツールバー (Symfony2 ツールバー、PHP デバッグなど) を実行してもらい、画面を構築するために必要なクエリの数を表示するよう依頼することです。些細な画面で 50 を超えるクエリ (または指定した上限) が必要になると、リファクタリングが必要になります。

また、合理的に表現力のあるクエリ構文を持つ ORM を選択する価値があります。そうしないと、開発者が「生の SQL」モードに戻ってしまい、そもそも ORM を使用する理由のいくつかが無効になります。同じ理由で、Daniel はこの点をうまく説明していますが、ORM を効果的に使用するためのトレーニングを開発者に提供することは素晴らしいアイデアです。

于 2013-03-11T01:15:56.740 に答える
1

ビューからクエリを実行することは悪い習慣です。あなたはそれを行うことができますが、Ajaxリクエストまたは適切と思われるものを介してコントローラーを介して行う方がよいでしょう。

于 2013-03-11T01:04:19.183 に答える