Ruby on Railsで気に入ったこと

そもそも、私は優れた経験を持つPHPプログラマーです。 多くの興味深いものが書かれ、主要なプロジェクト、電気通信サービスがヨーロッパのほぼ全体をカバーしていました。 プロジェクトの開発とサポートは、1〜2か月ではなく、1年半行われました。



管理職に移行し、絶えずプログラミングする必要性を回避した後、新しい言語とテクノロジーの研究と比較により多くの時間を割くことが可能になりました。 原則として、これは私の仕事の一部です:)



外観はRuby he Railsに落ちました。 Railsを使用した有名なアジャイルWeb開発:第2版が読まれ、小さなプロジェクトが書かれました。 ここでは、私が気に入ったこの美しいフレームワークの機能をリストしようとします。 Railsに書き込む予定がない場合は、他の言語に簡単に移植できるいくつかのグッズに慣れることは、あなたにとってまだ面白いと思います(私を含め、PHPについてはすでに多くのことが行われています)。



アプリケーションフレームワーク (好みの問題)

はい、はい。 多くの人はこれが彼らの自由の制限だと叫ぶでしょうが、私の経験が示すように、多くのプログラマーは単に制限される必要があります。 レールの構造は非常に論理的です。 各コンポーネントには独自の場所があります。 MVCコンポーネントの非常に明確な分離。



アプリケーション構成 (便利)

アプリケーションコンポーネントの命名に関する基本的な規則に従うことにより、面倒な構成を回避できます。 ランタイムへの最初の分割:開発、テスト、およびプロダクションもプログラミングの良いトーンです。



データベースのバージョン管理 (大規模プロジェクトで必要)

データベースの移行。 データベースに加えるすべての変更:テーブルの作成、インデックスの追加など。 -アプリケーションコードに配置され、バージョン管理システムに保存されます(SVNがあります)。 各移行は次のようになります



クラスAddEmailColumnToOrders <ActiveRecord :: Migration

def self.up

add_column:注文、:e_mail 、:文字列

終わり



def self.down

remove_column:注文、:e_mail

終わり

終わり



成功したアクティブレコード (強力なライブラリ)

データベースオブジェクトを操作するためのモデル作成のシンプルさは驚くべきものです。



クラスOrder <ActiveRecord :: Base

終わり



これは、ordersテーブルを操作するのに十分です。 明示的なマッピングはありません。 エンティティ間の関係を非常に便利かつ柔軟に実装します。



テスト (大規模プロジェクトで必要)

感情だけがあります。 テストには3つのタイプがあります。

1.ユニットモデルテスト-JUnit、PHPUnit(これはおなじみです)、

2.機能テスト-同じユニットテストですが、コントローラーの場合、

3.統合(?)Webアプリケーションのシナリオ全体のテスト。 コードはそれをすべて言います



def test_buying_a_product

dave = regular_user

dave.get "/ store / index"

dave.is_viewing "インデックス"

dave.buys_a @ruby_book

dave.has_a_cart_taining @ruby_book

dave.checks_out DAVES_DETAILS

dave.is_viewing "インデックス"

check_for_order DAVES_DETAILS、@ ruby​​_book

終わり



これは、最高レベルでアプリケーションをテストしています。



キャッシング (大規模プロジェクトで必要)

それから私は2つのことが好きだった。 1つ目はページキャッシュです。 url / products / details / 1で商品の説明を表示するとします。 Railsは、publicディレクトリに/products/detail/1.htmlファイルを作成できます。このファイルは、Webサーバーから静的コンテンツとして提供されます。 これがパフォーマンスに大きな影響を与えることは明らかです。

2番目は、キャッシュをクリアするタイミングを決定するモデルのオブザーバーです。 例えば



ArticleSweeperクラス<ActionController ::キャッシング:: Sweeper

記事を観察する

#新しい記事を作成する場合、記事の公開リストを再生成する必要があります

def after_create(記事)

expire_public_page

終わり

#既存の記事を更新すると、その記事のキャッシュされたバージョンは古くなっています

def after_update(記事)

expire_article_page(article.id)

終わり

#ページを削除すると、公開リストが更新され、キャッシュされた記事が削除されます

def after_destroy(記事)

expire_public_page

expire_article_page(article.id)

終わり

終わり



Javascript (便利)

1.プロトタイプとの良好な統合、

2. ajaxアプリケーションコンポーネントを開発するための幅広いヘルパー

3. RJSテンプレートを使用したjavascript生成(これはMVCのビュータイプです)。 こんな感じ



page.replace_html( "カート"、:部分=> "カート"、:オブジェクト=> カート

ページ[:current_item] .visual_effect:highlight ,: startcolor => "#88ff88" ,: endcolor => "#114411"



3.アプリケーションのJavaScriptが豊富で、クライアントがオフになっている場合(まだ賢い人がいる場合)、サイトを操作する機会を彼らに残しておくのは十分簡単です。



読み取り可能なURL (便利)

わかりやすいURLの認識と生成の実装は単純で論理的です。



map.connect 'store / checkout' ,: conditions => {:method =>:get} ,: controller => "store" ,: action => "display_checkout_form"

map.connect 'store / checkout' ,: conditions => {:method =>:post} ,: controller => "store" ,: action => "save_checkout_form"



加算

デバッグとスタッフ (便利)

組み込みのスクリプトプロファイラーとベンチマーク。 コントローラーインターフェイスで呼び出されるブレークポイントメソッドは、ページスクリプトを終了し、コンソールを介してアプリケーションでアクションを実行し、スクリプトの実行を続行できるようにします。



これは夜の11時に覚えていることです。 ホリバーを開始することは禁止されています。 すべてのプロジェクトで見たいものをリストアップしました。



All Articles