質問

私はよく耳にたたきORMsられる柔軟性に欠ける"漏れを抽象化"が好んで聞いて なぜ う問題がある。時の適切な利用とは何者かの断層のORMs?いうことで仕事をしているPHPのormといいなと思っていたので問題を解決する多くの他のORMsなどのぐさの負荷がサブクエリ.

できるだけ詳しくご記入くださいとのお答えなのです。一部コードを記述するデータベースのスキーマがORM争.関係ありませんの言語のORM.

役に立ちましたか?

解決

私は私が使用しているすべてのORMと気づいた大きな課題の一つは、最初のオブジェクトを取得せずに一部のフィールドだけを更新しています。

ID、名前、説明、owning_user:例えば、私は次のフィールドと私のデータベースにマッピングされたプロジェクトのオブジェクトを持っていると言います。セイは、AJAXを通じて、私は説明フィールドを更新します。ほとんどのORMに私は、データベーステーブルを更新するための唯一の方法は、唯一のIDを有すると記述値はどちらか、データベースからプロジェクト・オブジェクトを取得する説明を設定した後、データベースにオブジェクトバックを送信することである(したがって、2つのデータベース操作を必要とします一つだけの単純な更新の場合)または)私は現在使用している方法である(ストアドプロシージャを経由して、それを更新します。

他のヒント

オブジェクトとデータベースレコードは本当にすべてが類似していません。彼らはあなたがものを格納できるというスロットを入力したが、それはそれについてです。データベースは、プログラミング言語よりもアイデンティティの完全に異なる概念を持っています。彼らはよく、複合オブジェクトを処理することはできませんので、あなたの代わりに追加のテーブルと外部キーを使用する必要があります。大半は、型の継承の概念はありません。データベースの世界にマッピングされたときに、複数のラウンドトリップを作り、たくさん取得する必要があるためとオブジェクトのネットワークをナビゲートする自然な方法は、(1つのオブジェクト内のポインタのいくつかに従う別のオブジェクトを取得し、再び間接参照)、あまり効率的ですあなたが気にしなかったこと。

データの つまり、

:抽象化が最初の場所で非常に良好なものとすることはできません。それは悪いですORMツールが、彼らが実装していることの比喩ではありません。代わりに、それは完璧な同型のうわべだけの類似性であるので、作業自体は非常に良い抽象化ではありません。 (それはまだかかわらず、密接にデータベースを理解するよりも方法がより便利である。ORMツールの軽蔑は単なるプログラマーを見下ろすデータベース管理者から主に来る。)

オームズも効率的でないコードを書くことができます。データベースのパフォーマンスは、ほとんどのシステムに不可欠であるので、彼らは人間がコードを書いた場合は回避されている可能性が(しかし、任意のより良い問題の人間が理解していなかった場合は、データベースのパフォーマンスチューニングされてきていない可能性があります)問題を引き起こす可能性があります。クエリが複雑になったとき、これは特にそうです。

私は彼らと私の最大の問題はしかしORMは本当に書き込み場所の詳細を抽象化することにより、ジュニアプログラマは少なく、彼らはエッジケースや場所を扱うことができるようにする必要があるクエリを作成する方法を理解することになっているということだと思います不正なコード。それはあなたが基本を理解しなければならなかったことはありません時に高度なものを学ぶことは本当に難しいです。理解して誰かの手の中にORMが参加し、グループによって、高度なクエリは良いことです。ブール代数を理解し、参加していない人や他の基本的なSQLの概念の束の手では、データベースとクエリの非常に悪い設計で結果に非常に悪いです。

リレーショナルデータベースはオブジェクトではありません、そのように扱われるべきではありません。絹の財布にワシを作るしようとすると、一般的に成功していません。はるかに優れたワシが得意とする理由が何であるかを学び、悪い財布や死者鷲を持っているよりも、ワシフライをできるようにます。

に思います。を用いORMは、通常、複数のphp関数は、そのデータベースに接続すると本質的にまだ実行にMySQLクエリやかに似ています。

なぜすべての抽象化間コード及びデータベース?ができないのはなぜでしただけのものを使用していました。通常、ウェブdevを知ってそのバックエンド語、dbの言語(何らかのSQL)、ある種のフロントエンドの言語など、html、css、javascriptなど---。

本質的に、というを追加する抽象の層を含む多くの機能として知らphpの機能でするよりも遅れの設定です。これは、マイクロ計算もので追加します。

ないし複数の機能を通して考えている方向けのコースのORMの作品で一時間の無駄である。と思ったの発想では考えられないの分離をコードしたいコードは別。だが、ランプの世界だけを検索する(知っておきたいMySQLの利用により、既存のphpの機能を用意します。完了!

ランプ方法:

  • をクエリー(文字列);
  • 利用mysqli成功した場合は、取得データの配列になります。

ORM方法:

  • 実行機能を取得する主体
  • 走るので、MySQLのクエリ
  • 実行機能の追加条件
  • 実行機能を追加する他の条件
  • 実行機能が登場
  • 実行機能の追加条件分岐の参加
  • 実行う機能を
  • 走別のMySQLクエリ
  • 実行う機能を取り出しデータ
  • 走別のMySQLクエリ

は誰にORMスタック?なぜ今なlazy開発?で創造していを傷つける当社のコードについて教えてください。ばんたんいいじゃないか初書きぐらい。に枕元の目覚ましに、ipodを繋げらおdevチームの基本を理解することになるweb dev.

オームズは、非常に複雑な問題を解決しようとしています。エッジケース豊富かつ明確なまたは明白なソリューションと主要な設計上のトレードオフがあります。あなたは状況AのためのORMの設計を最適化するとき、あなたは本質的に状況Bを解決するため、それは厄介な作ります。

があり、「十分に良い」方法で、遅延ロードとサブクエリを扱うオームズがありますが、それは「素晴らしい」と「十分に良い」から取得することはほとんど不可能です。

あなたのORMを設計するとき、あなたはすべての可能な厄介なデータベース上でかなり良いハンドルを持っている必要があなたのORMは、ハンドルに予想されるデザイン。あなたは明示的にあなたがぎこちなく処理するために喜んでいるような状況の周りのトレードオフを行う必要があります。

私は柔軟性に欠けたり、平均複雑な抽象化よりも、それ以上、漏洩などのORMを見ていません。言った、特定のオームズは、これらの点で他のものよりも優れています。

車輪の再発明幸運ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top