2

データ層を構築するときに、休止状態や Microsoft Entity フレームワークなどのリレーショナル マッピング レイヤーへのオブジェクトを使用する利点または欠点があるかどうかを判断しようとしています。

長い目で見れば、手動で sql を使用してオブジェクトをマッピングする方がよいでしょうか、それともこれらのマッピング テクノロジのいずれかを活用する方がよいでしょうか?

ツールは単純なマッピングと sql を処理できるため、時間を節約できるため、単純なアプリの場合、追加のマッピング レイヤーが有利になる可能性がありますが、オブジェクト モデルがより複雑になった場合はどうでしょうか?

また、もしあればパフォーマンスへの影響は何ですか?

あなたが持っているかもしれない洞察をありがとう。

4

4 に答える 4

4

最善の選択肢は、何をするにしても、後で変更できるようにしておくことです。したがって、NHibernate または EF を使用する場合は、フレームワークへの実際の依存関係を非常に緊密に保持する必要があります。手動実装でも同じです。

リポジトリ パターンを実装してみてください。その後、NH リポジトリ、EF リポジトリなどを構築し、ニーズに最も適したものを確認できます。

私の個人的な意見では、適切な OR マッピングを (手動またはフレームワークによって) 行う必要があります。ここでの意味は、ビジネス/ドメイン オブジェクトがテーブルのように見えるだけでなく、その逆も同様であるということです。ORM の要点は、データベースからアプリケーションにデータを取得することだけではありません (DataSet はそれで十分でした)。バックエンドの RDBMS。

SQL を "ダム ストレージ" (私のお気に入りの使用法) として使用している場合は、OODB またはその他のオブジェクト永続化アプローチの使用を検討できます。これは、趣味/サイド プロジェクトで探求するのはいつでも楽しいことですが、経営陣に売り込むのは難しいケースです (彼らは SQL Server が大好きです)。しかし、検討する価値はあります。


もちろん、非常に小さなアプリケーションについて話している場合は、Active Record パターンまたはおそらく Transaction Script パターンのいずれかに従って何かを実装することができます。レコードはデータ入力/CRUD アプリケーションに最適です

于 2010-07-01T21:59:53.180 に答える
2

ツールは単純なマッピングと sql を処理できるため、時間を節約できるため、単純なアプリの場合、追加のマッピング レイヤーが有利になる可能性がありますが、オブジェクト モデルがより複雑になった場合はどうでしょうか?

実際、私はそれが逆だと言いたい。

複雑なオブジェクト モデルを持つ大規模なアプリケーションで ORM を使用する方が理にかなっています。

  • 単純な DB モデルを使用する非常に小さなアプリケーションの場合、ORM はおそらくやり過ぎです。なぜなら、どこかにバグを導入することなく永続化レイヤーを実装するのはかなり簡単であり、ORM は多くの作業を節約しないからです。

  • 一方、より複雑な DB データ モデルを持つ大規模なアプリケーションでは、JOINUPDATEなどを間違えやすくなるため、ORM が本当に役立つ場合があります。

于 2010-07-01T22:00:05.100 に答える
1

これが「ORM を使用する必要があるかどうか」という問題である場合。次に、あなたの質問に対する絶対的な答えはありません。各アプローチには、プラス面とマイナス面の両方のトレードオフがあります。

ORM は、特に大規模なデータ モデルを使用している場合に、非常に迅速に起動して実行するのに役立ちます。同じバージョンの製品で複数のデータベース ベンダーをサポートしているため、いくつかの異なる永続化レイヤーを生成する必要がある場合にも優れています。ORM は以前ほど悪くはなく、最近ではかなり効率的です。

個人的には、私はそれらのファンではありませんが、データベースのスキルにある程度習熟している場合は、それらを使用する必要があると思います. ORM は開発者をデータベースの複雑さから保護する傾向があると思いますが、これは必ずしも良いことではありません。私は自分のデータ アクセスとストレージを調整するのが好きです。データセットをドメイン オブジェクトにマップするためのコードを書くのは面倒かもしれませんが、それほど難しくなく、エラーが発生しやすいわけでもなく、常に何が起こっているかを正確に知っています。どこでも魔法が起こっているわけではありません。 . パフォーマンスの問題や非効率性があれば、すぐに追跡して修正できます。

于 2010-07-01T22:19:01.800 に答える
1

独自の ORM マッピング ツールを作成できます。たとえば、ここ http://askcodegeneration.com/php/generate-propel-schema-for-php-symfony/

propel orm スキーマは単純な記述クラス形式から生成されます (c# のような他の言語や Hibernate のような orm フレームワークでそれを行うことを妨げるものは何もありません。実際、将来的にはそうするつもりです):

class-list: [question answer user interest relevancy]

Sample-Model: {

  class question [

    Id: 0
    title: ""
    body: ""
    created_at: 'now
    updated_at: 'now
    user_Id: [User]

  ]

  class answer [

    Id: 0
    question_Id: [question]
    user_id: [user]
    body: ""
    created_at: 'now
    updated_at: 'now

  ]

  class user [

    Id: 0
    first_name: ""
    last_name: ""
    created_at: 'now
  ]

  class interest [
    question_id: [question]
    user_id: [user]
    created_at: 'now
  ]

  class relevancy [
    answer_id: [answer]
    user_id: [user]
    score: 0
    created_at: now
  ]

}
于 2010-07-01T22:25:49.397 に答える