[解決済み] なぜActive Recordは嫌われるのか?[クローズド]
質問
私がOOPについて学び、さまざまなデザインパターンを実装するようになると、私は、人々が アクティブレコード .
しばしば、人々はそれがうまくスケールしないと言います(Twitterをその典型例として挙げています)--しかし、誰も実際には なぜ ARの長所を短所なく実現する方法(似ているが異なるパターンを介して?)
これがデザインパターンについての聖戦にならないことを祈ります。私が知りたいのは、***具体的に*** Active Recordの何が問題なのか、ということだけです。
うまくスケールしないのであれば、なぜしないのですか?
他にどんな問題があるのですか?
どのように解決するのですか?
そこに ActiveRecordのデザインパターン と RailsのORMライブラリであるActiveRecord そして、.NETや他の言語用の模造品もたくさんあります。
これらはすべて異なるものです。ですから、「ActiveRecordは最悪だ」と言う前に、「どのActiveRecordなのか、たくさんあるじゃないか」と言う必要があるのです。
私はRailsのActiveRecordしか知らないので、それを使っている文脈で提起されたすべての不満に対処してみようと思います。
ブラマヨ
Active Recordsの問題点は、常に1つのテーブルしかないことです。
コードです。
class Person
belongs_to :company
end
people = Person.find(:all, :include => :company )
これは、SQLを生成する際に
LEFT JOIN companies on companies.id = person.company_id
という SQL を生成し、関連する Company オブジェクトを自動的に生成します。
people.first.company
を行うことができ、データはすでに存在しているので、データベースをヒットする必要はありません。
@pix0r
Active Record の固有の問題は、オブジェクトへの入力やデータベースレコードの変更のために、データベースクエリが自動的に生成、実行されることです。
コードです。
person = Person.find_by_sql("giant complicated sql query")
これは醜いのでお勧めしませんが、ただ単純に生のSQLを書く必要がある場合には、簡単に行えます。
ティム・サリバン(Tim Sullivan
...そして、モデルの複数のインスタンスを選択する場合、基本的に "select * from ..." を行っていることになります。
コードです。
people = Person.find(:all, :select=>'name, id')
これはデータベースから名前とIDのカラムを選択するだけで、マッピングされたオブジェクトの他のすべての「属性」は、手動でそのオブジェクトをリロードしない限り、単にnilになるだけです。
関連
-
[解決済み] Railsでpng画像を文字列形式で表示するには?
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み] サーバーに接続できませんでした。そのようなファイルまたはディレクトリがありません (PG::ConnectionBad)
-
[解決済み】Webpacker::Manifest::MissingEntryError【クローズド
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] gemのアップデート後、"Asset was not declared to be precompiled in production "でテストが失敗する。
-
[解決済み] RubyとRailsの "Date.today "フォーマット