11

大きな Rails アプリを小さなアプリに分割しますか?

Rails アプリケーションのモジュール化

「大規模な」Rails アプリを構築するためのベスト プラクティス

大規模な Ruby on Rails アプリのモジュール化について簡単な質問があります。

設定:

人々に関する情報を保存するコアアプリを構築しています。また、その情報を非常に異なる方法で使用する「モジュール」もいくつかあります。(たとえば、人々に関する情報を表示したり、人々の間のつながりや共通点を見つけたりすることができます)。

質問:

このアプリを効率的にモジュール化するにはどうすればよいですか?

考えられる答え:

モジュールはモデルとビューをコア アプリ (および相互) と共有するため、それらを 1 つのアプリに結合することは理にかなっています。ただし、アプリが成長するにつれて、これは明らかに問題につながります。これは、コントローラーとモデルの名前空間「適度に大きなRailsアプリケーションでコントローラーを整理する方法」またはエンジンを使用する「Railsアプリケーションのモジュール化」のいずれかを示唆しています。

モジュールは活発に開発されているため、Rails ジェネレーターを使用すると非常に便利です。また、エンジンは Rails の観点からは完全にサポートされていますが、ジェネレーターのサポートとデータベースの移行の欠如に関しては、いまだにハッキリしているように見えます。エンジンの開発に成功した経験のある人はいますか? 動作中のアプリがあり、それをプラグインに移植したい (つまり、コードをコピーして貼り付ける) 場合、エンジンは優れたソリューションのように思えますが、積極的に開発している場合 (モデルの変更など) は難しいでしょう。

私が最後に見たのは、複数のアプリと 1 つのデータベースを使用していることです。この方法は、移行やモデルをまっすぐに保つなどの王室の苦痛のように思えますが、それについても考えてみようと思いました。

4

5 に答える 5

1

エンジンは使いません。エンジンは、アプリ間で機能を共有するために使用されることを意図しています。やりたいことは、機能を共有することではなく、整理することです。

コードを整理するために、さまざまなことができます。

  • 名前空間を使用します。
  • コントローラーを薄く保ちます。
  • モデルを薄く保つ (はい、モデルです。次の箇条書きを参照してください)
  • Data Context Interaction (DCI) パターンを使用します。
  • Apotomo や Cells などのウィジェット フレームワークを使用します。
  • テストを作成して、リファクタリングできるようにします。
  • アプリの責任が大きくなりすぎる場合は、サービス指向アーキテクチャを検討してください (ハイパーメディア API の設計を検討してください)。

Andrzej には、DCI に関する非常に優れた記事があります。

http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html

于 2012-03-07T10:36:16.860 に答える
1

Rails エンジンは、あなたにとって正しいソリューションのようです。Rails Engines の上に構築されたRefinery CMSで作業したとき、私はエンジンを使用しました。

以下は、Rails Engine について説明している便利なリンクです。

http://www.themodestrubyist.com/2010/03/01/rails-3-plugins---part-1---the-big-picture/

http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/

http://www.themodestrubyist.com/2010/03/22/rails-3-plugins---part-4---more-on-generators/

于 2011-07-22T04:51:55.980 に答える
0

Rack Middlewareを使用して特定のタスクを処理することもできます。

アプリケーションの大部分については、エンジンが最適なソリューションのように思えます。私もそれを検討しています。エンジンでジェネレーターを簡単に定義できるようです。

于 2012-03-07T10:03:19.050 に答える
0

データの構造とアクセス パターンによっては、アプリを複数のアプリに分割し、さらに (RESTful) API によるデータ アクセスを提供すると便利な場合があります。

私の経験では、これにより、アプリケーションが中規模から大規模に成長したときに最適な構造が可能になり、構造と関心の分離について考える必要があります。通常、スケールアップも簡単です。

于 2012-03-07T10:32:21.243 に答える
0
  • 1 つのアプリケーション、1 つのデータベース。
  • モジュール間でモデルを共有します。
  • コントローラーとビューに名前空間を設定します。
  • テスト。
于 2011-07-22T03:22:23.130 に答える