3

Rails を使用して、要件に合わせて構成できる拡張可能なモジュラー アプリケーションを構築したいと考えています。

「拡張可能」と「モジュラー」の下で私が理解していることを説明しましょう。たとえば、私がブログ アプリケーション エンジンで作業していてBlogEntry、単純なブログ エントリに通常含まれるもの (タイトルとコンテンツ) を含む という名前のモデルがあるとします。このアプリケーションを 2 つのモードで実行できるようにしたいとします。

  • BlogEntryタイトルとコンテンツの2つの属性のみを持つ単純化
  • 拡張モードBlogEntryでは、 がより多くの属性を持つように拡張された場合、たとえば、 という名前の別のモデルと多対多でリンクされTagます。

私の目標は次のとおりです。

  • 追加パッケージのインストール、構成スイッチの有効化/無効化、構成ファイル内の行のコメント解除など、いくつかの単純なメカニズムを使用して、エンド ユーザーが基本的な形式または拡張機能の形式でアプリケーションを展開できるようにします。 「モード」 - これらの追加機能はほとんど独立しており、そのうちのいくつかを同時に有効にすることができます。
  • コードベースの明確な分離 - 基本機能のみを実装するものと、追加のプラグ可能なもの (既存のモデルまたは新しいモデルの追加属性など) を実装するもの。これらの変更は、モデル自体だけでなく、コントローラー、ビュー、gem 要件、テスト、ルーティング ルール、拡張機能モデルのサポートに必要なデータベース移行などにも反映する必要があります。
  • モデル、コントローラー、およびビューにオブジェクト指向の原則を使用します。たとえば、基本モデルBlogEntryは単純なスタンドアロン クラスにすぎません。タグ機能をプラグインする場合、BlogEntryクラスにはある種の拡張モジュールが含まれ、コードがBlogEntryController追加され、特定のモデルに出力が追加されることさえあります。 blogentry のビュー内の指定された場所。

したがって、複雑な機能を必要としない場合、アプリケーションは非常にシンプルで基本的なままです。追加機能が必要な場合は、アプリケーションを複数のプラグインで拡張できるため、1 つのアプリですべてを行う巨大なブロートウェアにはなりません。

実際、このようなプラグ可能な機能は、MediaWiki、Moodle、WordPressなど、事実上すべての主要な高レベル Web 開発プラットフォームに存在します。

これまでに「モジュラーレール」を検索すると、次の結果が得られました。

  • Rails エンジン - 基本的に、私の理解が正しければ、これは大きなアプリケーションをいくつかの小さな準独立したアプリケーションに分割し、それらの間にリンクを構築する方法です - それは私が望んでいるものではありません。これにより、いくつかの共通の Rails コードをいくつかの異なるアプリケーションで再利用することもできますが、これも私が望んでいるものではありません。
  • Rails プラグイン - 基本的には、gem の形式で外部ライブラリをプロジェクトに簡単に含めるメカニズム (プラグイン提供のジェネレーターなどの追加機能を使用) ですが、プラグインとの広範な統合を必要とする開発者向けのソリューションです。これは一般に、エンドユーザー管理者がこの機能を必要とするかどうかを決定する必要があるスキームには適していません。有効または無効にする簡単な構成プロセスはありません。
  • アプリケーション テンプレート- 基本的に、ジェネレーターにラップされた既製のアプリケーションで、そのようなアプリケーションをすばやく生成できます。これはコードの再利用には役立つかもしれませんが、構成可能なモジュール性の概念とは何の関係もありません。

私が話していることを達成する方法は無数にあるに違いありません。最高のものは何ですか?このようなモジュラー アプリケーションの良い例はどこにありますか?

4

1 に答える 1

1

Rails Engines はまさにあなたが求めているものだと思います。

基本的にあなたが説明したことを達成するために、エンジンとして提供されるいくつかのアプリケーションに貢献しました。これは主に私が開発したものです: http://github.com/team-umlaut/umlaut

必ずしも完全に単純というわけではありません。設定方法について決定を下さなければならない場所がたくさんあります。また、Rails のドキュメントや明白な慣習が必ずしもあなたを導くとは限りません。(非常に限られた) エンジンのドキュメントが、必ずしもこの道をたどるわけではないことに同意します。しかし、必要なことを行うにはエンジンで十分です。また、自分をぶら下げたり、物事を過度に複雑にしたりするのに十分なロープを用意してください。

rails plugin new name_of_engine --full--を使用せず に Engine スケルトンを作成することをお勧めし--mountableます。--mountableこの特定の種類のエンジンのユースケースでは、複雑すぎてメリットがないと思います。(他の人は同意しないかもしれません。そうです、この場合の選択とベストプラクティスが常に明確であるとは限らないということに戻ります)。

Rails プラグインは基本的に非推奨です。現在サポートされているプラ​​グインの種類は、plugins-as-gems だけです。このうち、エンジンは最も強力な種類 (Rails とのほとんどの種類の対話を行うことができます) であり、この種の操作に必要です。

また、アプリ テンプレートがここで十分でない理由については同意しますが、gemfile 内のエンジンを使用してアプリを作成するアプリ テンプレートと、ローカル アプリで生成された必要なローカル スタブを提供することをお勧めします。の最新バージョンでそれを行いましたが、umlaut最近までしませんでした。厳密には必要ではなく、少なくとも基本的な概念の証明が得られるまでそのままにしておきます。

Rails は必ずしもこれを奨励しているわけではありませんが、可能であり、十分な作業を行えばうまくいきます。

于 2014-10-07T06:21:04.607 に答える