2017-01-05 12 views
1

私はSequelize.jsで最近働いていて、頻繁に "DAO"という言葉をよく読んでいました。 ActiveRecord(Railsで)を使用することから来る、ORMのアイデアはかなり単純です。DAOとORM - Sequelize.jsのコンセプトで説明されたコンセプト

誰かが私に説明してもらえますか(できれば、JavaScriptを使用していくつかのコンテキストで& Sequelizeを使用してください)DAOは何ですか? ORMとの違いは?モジュール化されたコードの結果と抽象度の漏れを防ぐ方法

編集:のようなものを読んだ後:https://www.reddit.com/r/learnprogramming/comments/32a1fr/what_is_the_general_difference_between_dao_and_orm/

それはDAOは単数の「モデル」として考えることができように/はそう感じている - のActiveRecordの文脈の中で、私のユーザーインスタンスはDAOで考慮されるように"は、永続データストアの実装をアプリケーションから抽象化し、アプリケーションとの単純な対話を可能にします"?

+0

"生の問合せ" /あなたは// 、DBからの大規模なデータセットを期待しているし、各エントリのタイム建物のDAOを過ごすためにしたくないですか? Project.findAll({::{...}、生:真}) ' –

答えて

4

ここでは、それを明確にするのに役立ついくつかの考えがあります。私はSequelizeよりもActiveRecordに精通しているので、私はそれを実行しますが、その概念は両方で同じでなければなりません。

データベースがあります。 Railsとは完全に独立していて(例えば、データベース管理ツールを使用して)、"select * from users limit 1"のようなデータベースに問い合わせて実行することができます。しかし、これはちょうどあなたのRailsアプリケーションにあまり役に立たないいくつかの管理ウィンドウの結果のセットを提供します。 RailsアプリケーションからSQLを実行し、Ruby/Railsが動作できる形式でデータを取得できるようにします。 Dataルビのいくつかの種類Object - あなたはData Access Object、またはDAOが必要です。

はレールでは、あなたのような何かを上記のクエリを実行できます。

result = ActiveRecord::Base.connection.execute("select * from users limit 1") 

result変数が知っているか、あなたのUserモデルを気にしないだろう。それが含まれていますすべてが同じように、基本的に平野ルビーHashインスタンスのリストです:あなたはfirst_nameBobに、あなただけのそのハッシュを編集し、それに対してsaveを呼び出すことができませんでした更新したい場合は

{ 
    "id" => "1234", 
    "email" => "[email protected]", 
    "first_name" => "Fred", 
    "last_name" => "Flintstone", 
} 

- それだけです単純な古いハッシュ、ちょうどデータと余分なスマート。だから、もう一度、独自のSQLを書き、Railsはあなたのためにそれを実行するために取得する必要があるだろう:

ActiveRecord::Base.connection.execute("update users set first_name = 'Bob' where id = 1234") 

それでは、あなたは、この文脈で使用していること、それはORMだ使用しなくても、基本的には鉄道のDAOです。

ORMは、DAOの上のレイヤーのようなものです。 ORMのないDAOを使用できますが、のないORMは使用できません。 ORM、またはObject Relational MapperRelationalデータベースのMapという概念/レコードになります。Objectsのプログラミング言語(つまりRuby)です。あなたはレールのORMむしろそれはDAOだ使用するよりもを使用して、上記のものをやってみたかったのであれば、それは次のようになります。

user = User.find(1234) 
user.name = 'Bob' 
user.save! 

は、ORMを使用しているどのくらいの立派参照してください?ORMを使用した上記のスニペットは、本質的に前に説明したのと同じSQLを実行します。 ORMは、より多くの細部を抽象化し、賢いオブジェクトを提供して、余分な作業を私たちに救います。

は再び、実証された概念はSequelize/Javascriptと他のlangs /フレームワークに譲渡されています。

のでDAOは単に「SQLを実行し、プログラミング言語に固有のいくつかの基本的なデータ構造に結果を返すことができるオブジェクト」です。 ORMは、最終的にはデータベースとの通信にDAOを使用しますが、上に全体の多くを提供しています。 `/:Sequelize.jsは` DAO`言及[具体例](http://docs.sequelizejs.com/manual/tutorial/models-usage.html#raw-queries)である

+0

恐ろしい応答 は//代わりに、生データを取得するために余分なクエリオプションを渡すことができます。多くのことを明確にするのに役立ち、私の心の中に浮かんでいる「疑い」を確認しました。どうもありがとうございました。 –

関連する問題