MySql APIの代わりにActiveRecordを使用する理由
-
03-07-2019 - |
質問
私はしばらくの間Webアプリケーションを開発してきましたが、mySqlには非常に満足しています。実際、多くの人がほぼ毎日何らかの形式のSQLを使用しています。私は構文が好きで、クエリの作成やテーブルの最適化に問題はありません。このmysql api を楽しんでいます。
私を悩ませているのは、Ruby on RailsがActiveRecordを使用し、すべてを移行して、関数を使用してデータベースを照会することです。 「SQLをもう一度見る必要はありません」という考えが思い浮かびます。たぶん、これはKISSではありません(単純に愚かにしてください)が、ActiveRecordインターフェースは本当に最高ですか?もしそうなら、なぜですか?
SQLステートメントを記述する必要がない開発は健全ですか? Rails関数としてまだ定義されていないものを調べる必要がある場合はどうなりますか?カスタムクエリを実行できる関数があることを知っています。私は本当に人々がmySQLよりもActiveRecordを使用することの利点を考えている人を知りたいと思うし、これがレールコミュニティにとって多分これは電卓が数学コミュニティにとって何であり、何人かの人々は長くする方法を忘れるかもしれないと思う人がいると思う分割。
解決
SQLをActiveRecordのレイヤーの後ろに隠すことは、人々が生成されたSQLをチェックするのを忘れるかもしれないということです。私はこれに噛まれました:インデックスの欠落、非効率的なクエリなど。
ActiveRecordでできることは、簡単なことを簡単にすることです:
Post.find(1)
vs
SELECT * FROM posts WHERE posts.id = 1
開発者であるあなたは入力する回数が少ないため、エラーが発生する可能性が低くなります。
検証は、ActiveRecordで簡単にできることです。とにかくやらなければならないので、簡単な方法がありませんか?繰り返しの退屈な部分は抽象化されていますか?
class Post < ActiveRecord::Base
validates_presence_of :title
validates_length_of :title, :maximum => 80
end
vs
if params[:post][:title].blank? then
# complain
elsif params[:post][:title].length > 80 then
# complain again
end
もう一度、指定しやすく、検証しやすい。さらに検証が必要ですか? ActiveRecordモデルに追加する1行。複数の条件を持つ複雑なコードは、デバッグとテストが常に困難です。簡単にできますか?
SQLの代わりにActiveRecordで本当に気に入っているのは、コールバックです。コールバックは、SQLトリガー(MySQL 5.0以降でのみ使用可能)でエミュレートできますが、ActiveRecordには当時からコールバックがありました(0.13で開始しました)。
要約するには:
- ActiveRecordは簡単なことを簡単にします。
- ActiveRecordは退屈で繰り返しの多い部分を削除します。
- ActiveRecordは、独自のSQLの作成(通常はパフォーマンス上の理由で)、最後に;
- ActiveRecordはほとんどのデータベースエンジン間で完全に移植できますが、SQL自体は(時々)そうではありません。
あなたはあなたがMySQLについて具体的に話していることを知っていますが、それでもです。オプションがあると便利です。
他のヒント
ここでの考え方は、DBロジックをActive Records内に配置することで、アプリケーション全体に分散するのではなく、1か所でSQLコードを処理するということです。これにより、アプリケーションのさまざまなレイヤーが単一責任原則(オブジェクトが変更する理由は1つだけである必要があります)に従うことが容易になります。
データベーススキームを変更する場合は、SQLの回避が役立ちます。抽象化は、検証など、あらゆる種類のことにも必要です。 SQLを作成できないという意味ではありません。SQLの必要性を感じたら、いつでも作成できます。ただし、user.saveのみが必要な5行のクエリを記述する必要はありません。不要なコードを避けるのがRailsの哲学です。