6

私が最初に Rails と Django を調べ始めたとき、Django 開発者は、Rails は過剰な「魔法」(リーキーな抽象化) を使用するブラック ボックスであると感じ、Rails から遠ざけました。Rails をさらに詳しく調べると、これは scaffolding を使用せずに Rails でカスタマイズを行う方法を知らないことに基づく、情報に基づかない仮定ではないかと思います。スキャフォールディング自体は多くのことを隠しているように見えますが、スキャフォールディングなしでプロジェクトを作成する方法を理解すれば、Rails は Django と同じくらい高度にカスタマイズできるように思えます。これは私の誤解ですか、それとも Rails の「魔法の」批評家の誤解ですか?

4

6 に答える 6

10

Rails は、Ruby のメタプログラミング機能を広範囲に使用して多くの単調な作業を行いますが、魔法のようなものはありません。最終的にはすべて単なるコードであり、十分な時間と労力があれば理解できます。

スキャフォールディングは、モデルに対して CRUD 操作をすばやく実行するための方法として常に意図されていました。意図は常に、足場を実際の本番コードに置き換える必要があるということでした。

于 2009-01-17T18:21:52.477 に答える
5

Merbは何だと思いますか?これは、Rails開発者がRailsのあまりにも多くの魔法に反抗していることの旗です。

Rails 3は、魔法を減らし、Merbの多くの部分を引き込み、物事をクリーンアップする試みです。

今、本当に魔法が多すぎますか?たぶん、でもこれを覚えておいてください。Railsは基本的にDSL(ドメイン固有言語)のコレクションであり、Web開発のフレームワークとしてまとめられています。それがとてもクリーンな理由です。ルート、テンプレート、ORMなどの言語です。クリーンなDSLを作成するには、Rubyを拡張する必要があります。これには、魔法やメタプログラミングが必要です。

Djangoはそれを行いません、それはPythonの方法ではありません。それは良くも悪くもありませんが、明らかに違うだけです。

今あなたは尋ねました、Railsにはあまりにも多くの魔法がありますか?

アーサーCクラークの予測の第3法則を思い出してください。十分に高度なテクノロジーは、魔法と見分けがつきません。

おそらく、あなたの開発者の友人は、Railsは高度なテクノロジーであり、快適に使用できないと言っていたのかもしれません。

私にとっては、Railsのソースを読んで、何が起こっているのかを理解することができます。確かに場所によっては複雑ですが、私は常にソースをウォークスルーし、非常に広範な単体テストを読み、それがどのように機能するかを知ることができました。カーネルも非常に複雑ですが、私たちはそれらの理由でそれを使用することを拒否しませんか?

于 2009-01-18T03:36:27.740 に答える
5

Rubyist の Django に対する意見以上に、Rails に関する Pythonista の推奨を受け入れることはありません。少なくとも、両方のプラットフォームについて合理的なレベルの理解を示すことができ、それができる人が非常に少ない場合を除きます。

フレームワークは (Django 側での私の限られた理解では) 類似したアーキテクチャを持っていますが、異なる方法で成長し、異なる言語の長所を利用しています。

Railsにはかなりの「魔法」があり、構成よりも規約がフレームワークの大部分を占めていることに同意します。それが Python の専門家にとってどのように不快感を与えるかはわかりますが、それはおそらく公平です。Ruby の相対的な強みの 1 つは、魔法を実現するメタプログラミング機能です。そのためか、一般的に Python ではモンキー パッチが疑わしいと見なされているように思われますが、Ruby ではそれが一般的です。良くも悪くもありません。ただ違うだけです。

正直なところ、どちらのプラットフォームでも開発を楽しむことができると思います. それぞれに 2 ~ 3 日かけて簡単なアプリを作成し、一番気に入ったアプリを使用することをお勧めします。どちらを選択したか、またその理由についてのフィードバックをお待ちしています。

于 2009-01-17T18:57:39.907 に答える
2

この質問のバリエーションに対する過去の回答を読むのに時間を費やすと便利な場合があります(たとえば、ここで私の見解を説明しました)。

于 2009-01-18T03:51:06.210 に答える
1

レールがブラックボックスとしてどのように表示されるかわかりません。ソースがあります。ルビーのいくつかは少しトリッキーで、メタプログラミングは物事を追跡するのを難しくする可能性がありますが、それはすべてあなたが見ることができます。さらに、足場の批判は、すぐそこにある非常に基本的なコードテンプレートを作成するだけの生成された足場ではなく、古い足場について話しているのでなければ意味がありません。

ジャンゴイストは知らされていなかったと思いますが、実際には、レールがトリッキーなルビーを使いすぎて、ルビーのクラスにモンキーパッチを当ててはいけないいくつかのことを踏みにじるようなものを意味していました。それは可能性のあるケースです。

もちろん、オーストラリアではジャンゴが赤ちゃんを食べると確信しているので、彼らは実際にレールを悪くするべきではありません。

于 2009-01-18T03:02:53.143 に答える
1

ここでは「公正」という概念が間違っていると思います。それはすべて好みの問題です。Rails monkey がビルトインのタイプの ruby​​ にパッチを当てているのが恐ろしいです (結果として "5.days" のような結果になります)。私はこの魔法を考えます。一部の ruby​​ist は、これを堅実なエンジニアリングと考えるかもしれません。

Rails が言語ランタイムに対して多くの明白でないことを行うと言うのは客観的だと思います。これを良く考えるか悪くするかはあなた次第です。

于 2009-01-18T11:31:32.053 に答える