backbone.jsに基づく多くのフレームワークの実際の長所と短所は何ですか?[閉まっている]


186

誰かが最新のbackbone.js亜種のいくつかで経験を共有できることを願っています。いくつかのプロジェクトでbackbone / underscore / requireの使用経験があり、複雑なアプリケーション構造のより高度なソリューションに向けて次のステップに進みたいと思います。

次のフレームワークが利用可能であることを知っています。

そしておそらく私はいくつかを逃した。

ここに違いについての短い紹介があります:

しかし、それは非常に一般的です。誰かがこれらのフレームワークを使用して実際のアプリケーションと経験を共有できるかどうか疑問に思っていました。

どちらかを選択する利点は何ですか?マリオネットがチャップリンよりも優れたソリューションになるのはいつですか?

もちろん、明確な答えは「ニーズに最適なものを使用する」ですが、私はこれらのフレームワークで、その強さ/目的/利点または好ましいシナリオを知るための経験が不足しています。

ありがとう!

編集1: この投稿を見つけました: Backbone.Marionette vs Backbone-Boilerplate

編集2: Mathias schafer(Chaplin)によるメールでの回答:

要するに、現在の構造はすでに本番環境で使用されているため、バージョン1.0に近いものです。1.0までは、大きな新機能を追加したり、APIの変更を壊したりする予定はありません。

マリオネットは確かに世の中で最も包括的で安定したライブラリです。バックボーンを使用したJSアプリ開発のいくつかの側面に対処します。たとえば、バックボーン自体が完全に空白のままにする強力なビューレイヤーがあります。もちろん、いくつかの側面があなたの要求を満たさないことに気付くでしょう、そしてあなたはマリオネットの周りに構造をセットアップする必要性を感じるかもしれません。

対照的に、チャップリンは、バックボーンアプリのかなり小さいが非常に重要な側面、つまりアプリの全体的な構造とモジュールのライフサイクルに焦点を当てています。これに関して、チャップリンは非常に好意的であり、ライブラリよりもフレームワークに似ています(「コードがライブラリを呼び出す、フレームワークがコードを呼び出す」など)。Chaplinは、個々のアプリケーションモジュールの上に位置し、アプリ全体の状態を制御するいくつかの中央クラスを提供します。これにより、たとえばRuby on Railsが行うような従来の構造がアプリに与えられます。

チャップリンでは、コントローラーにマップするいくつかのルートを宣言し、ルートが一致するとチャップリンはコントローラーを起動します。また、古いコントローラーの破棄、およびコントローラーが作成することになっているメインビューの表示と非表示も処理します。これは基本的な考え方ですが、チャップリンは醜い細部を処理して、スムーズに実行できるようにします。

この構造には2つのプリンシパルがあります。-モジュール化、デカップリング、サンドボックス-パブリッシュ/サブスクライブとメディエーターを使用したモジュール間の通信

もちろん、これらのパターンはソフトウェア開発の世界では新しいものではなく、ChaplinはそれらをBackbone.jsアプリに適用する唯一のライブラリではありません。

Chaplinはまた、非常に洗練されたCollectionViewなどのビューレイヤーの拡張機能も提供しますが、リージョンとレイアウトを備えたマリオネットほどではありません。しかし、チャップリンビューが提供する手段を使用して、このようなメタクラスを記述することは比較的簡単です。


12
+1あなたの質問がその場で見つかりました。過去1〜2年の間に、ある種のフレームワークの誇大宣伝により、アーキテクチャに触発されたプロジェクトは無数に広まり、差別化は非常に難しくなります。これはコメントであることに注意してください:)
kontur 2012年

回答:


132

あなたが見ているフレームワークのほとんど(すべて?)は同じ問題を解決しますが、それらはわずかに異なる方法で、わずかに異なる目標でそれを行います。

これらのプロジェクトはすべて、これらのカテゴリの問題を解決すると言っても過言ではありません。

  • 適切なデフォルトのセットを提供する
  • ボイラープレートコードを削減する
  • BackboneJS構築ブロックの上にアプリケーション構造を提供する
  • 作成者がアプリで使用するパターンを抽出する

2011年12月から構築しているマリオネットには、非常に明確な目標と理想がいくつかあります。

  • 複合アプリケーションアーキテクチャ
  • エンタープライズメッセージングパターンの影響
  • モジュール化オプション
  • 増分使用(オールオアナッシング要件なし)
  • サーバーロックインなし
  • これらのデフォルトを簡単に変更できるようにする
  • 構成としてコード化/構成オーバー

他のどのフレームワークにも同じ目標がないと言っているのではありません。しかし、私はマリオネットの独自性はこれらの目標の組み合わせから来ていると思います。

複合アプリケーションアーキテクチャ

WinFormsとC#を使用して、シッククライアントの分散ソフトウェアシステムで5年以上作業しました。デスクトップ、ラップトップ(スマートクライアント)、モバイルデバイス、およびWebアプリケーション用のアプリを作成しました。これらはすべてコア機能セットを共有し、同じサーバーバックエンドで何度も作業しています。今回、モジュール化の価値を学び、コンポジットアプリケーション設計の道を急速に進みました。

基本的な考え方は、アプリケーションのランタイムエクスペリエンスを「構成」して、必ずしもお互いを認識しているわけではない多くの小さな個々の部分から処理することです。複合アプリケーションシステム全体に登録し、分離されたメッセージと呼び出しのさまざまな手段を通じて通信します。

私はブログでこれについて少し書いて、バックボーンの複合アプリケーションアーキテクチャとしてMarionetteを紹介しました。

メッセージキュー/パターン

同じ大規模な分散システムでも、メッセージキュー、エンタープライズ統合パターン(メッセージングパターン)、およびサービスバスを利用してメッセージを処理しました。これは、何よりも、分離されたソフトウェア開発への私のアプローチに多大な影響を与えました。この観点から、シングルプロセスのインメモリWinFormsアプリケーションを目にするようになり、すぐにサーバーサイドとWebアプリケーションの開発がこれに影響を受けました。

これは、バックボーンアプリケーションの設計の見方に直結しました。高レベルのApplicationオブジェクトと、アプリケーション内で作成する各モジュールの両方に対して、Marionetteでイベントアグリゲーターを提供します。

モジュール間で送信できるメッセージについて考えます。コマンドメッセージ、イベントメッセージなどです。また、サーバー側の通信も、同じパターンのメッセージと考えています。いくつかのパターンはすでにマリオネットに組み込まれていますが、まだ組み込まれていないパターンもあります。

モジュール化

コードのモジュール化は非常に重要です。明確に定義された入口と出口を備えた単一の焦点を持つ、小さくてカプセル化されたパッケージを作成することは、重要なサイズと複雑さを持つシステムにとって必須です。

マリオネットは、そのmodule定義を通じて直接モジュール化を提供します。しかし、一部の人はRequireJSが好きで、それを使いたいと思っていることも認識しています。したがって、標準ビルドとRequireJS互換ビルドの両方を提供します。


MyApp = new Backbone.Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // your module code goes here

});

(このためのブログ投稿はまだありません)

増分使用

これは、私ができるマリオネットのすべての部分に注ぎ込む中心的な哲学の1つです。マリオネットを使用するための「オールオアナッシング」の要件はありません。

バックボーン自体は、非常にインクリメンタルでモジュール式のアプローチを採用しており、そのすべてのビルディングブロックオブジェクトを備えています。いつ使用するかは自由に選択できます。私はこの原則を強く信じており、マリオネットが同じように機能するように努めています。

そのために、私がマリオネットに組み込んだ部品の大部分は、スタンドアローンで、バックボーンのコア部分と連携し、さらにうまく連携するように構築されています。

たとえば、ほぼすべてのバックボーンアプリケーションは、画面の特定の場所にバックボーンビューを動的に表示する必要があります。アプリはまた、新しいビューが配置されたときに、古いビューを閉じてメモリをクリーンアップする必要があります。ここでマリオネットRegionがプレイします。リージョンは、ビューを取得し、レンダーを呼び出して、結果をDOMに詰め込むというボイラープレートコードを処理します。次に、ビューに「閉じる」メソッドがある場合、そのビューを閉じてクリーンアップします。


MyApp.addRegions({
  someRegion: "#some-div"
});

MyApp.someRegion.show(new MyView());

ただし、リージョンを使用するためにマリオネットのビューを使用する必要はありません。唯一の要件は、オブジェクトのプロトタイプチェーンのある時点でBackbone.Viewから拡張していることです。closeメソッド、onShowメソッド、またはその他を提供することを選択した場合、マリオネットのリージョンが適切なタイミングでそれを呼び出します。

サーバーロックインなし

さまざまなサーバーテクノロジーの上にバックボーン/マリオネットアプリを構築しています。

  • ASP.NET MVC
  • Ruby on Rails
  • ルビー/シナトラ
  • NodeJS / ExpressJS
  • PHP /スリム
  • ジャワ
  • アーラン
  • ... もっと

JavaScriptは、ブラウザーでの実行に関してはJavaScriptです。サーバー側のJavaScriptも素晴らしいですが、ブラウザーベースのJavaScriptの記述方法には影響も影響もありません。

私が作成したプロジェクトとクライアントが使用するバックエンドテクノロジーの多様性のため、何らかの理由でMarionetteを単一のサーバー側テクノロジースタックに固定することはできません。ボイラープレートプロジェクトは提供しません。Ruby gemやnpmパッケージは提供しません。マリオネットは特定のバックエンドサーバーを必要としないことを人々に理解してほしい。これはブラウザベースのJavaScriptであり、バックエンドは関係ありません。

もちろん、言語とフレームワークのパッケージを提供している他の人々を完全にサポートします。私はそれらのパッケージをWikiにリストし、人々が必要に応じてさらに多くのパッケージをビルドし続けることを願っています。しかしそれはコミュニティのサポートであり、マリオネットからの直接のサポートではありません。

デフォルトを簡単に変更

ボイラープレートコードを削減し、適切なデフォルトを提供するための取り組み(これはTim BranyenのLayoutManagerから直接「借りた」という考えです)で、他の開発者が私とは少し異なる実装を使用する必要性を認識しています。

<script>デフォルトでUnderscore.jsテンプレートを使用して、テンプレートのインラインタグに基づくレンダリングを提供します。しかし、マリオネットのRendererTempalteCacheオブジェクトを変更することで、これを置き換えることができます。これらの2つのオブジェクトはレンダリング機能のコアを提供し、特定のテンプレートエンジンとテンプレートをロードするさまざまな方法でこれを変更する方法を示すWikiページがあります。

Marionetteのv0.9を使用すると、さらに簡単になります。たとえば、インラインテンプレートスクリプトブロックの使用をプリコンパイル済みテンプレートに置き換える場合、レンダラーの1つのメソッドを置き換えるだけで済みます。


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};

これで、アプリケーション全体で、ビューのtemplate属性にアタッチしたコンパイル済みのテンプレートが使用されます。

Marionette.Asyncアドオンにv0.9を追加して、ビューの非同期レンダリングをサポートできるようにします。Marionetteのデフォルトの動作をできるだけ簡単に置き換えることができるように、引き続き努力しています。

構成としてコード

私は特定のコンテキストで「構成よりも規約」のファンです。それは物事を成し遂げる強力な方法であり、マリオネットはこれの少しを提供します-それほど多くはありませんが、正直に。他の多くのフレームワーク-特にLayoutManager-は、Marionetteが提供するよりも多くの規則を構成に提供します。

これは目的と意図をもって行われます。

私は十分なJavaScriptプラグイン、フレームワーク、アドオン、およびアプリケーションを構築して、規則を意味のある高速な方法で機能させようとすることの苦痛を理解しました。それは速度で行うことができますが、通常はそれを変更できるという犠牲を払って行います。

そのために、私はマリオネットに「構成としてのコード」アプローチをとります。一連の動作を変更する静的な値をオブジェクトリテラルに提供できる、多くの「構成」APIは提供していません。代わりに、注釈付きのソースコードと実際のAPIドキュメントの両方を使用して、Marionetteを希望どおりに動作するように変更する方法を説明する目的で、各オブジェクトが持つメソッドを文書化します。

Marionetteオブジェクトにクリーンで明確なAPIを提供することにより、特定のオブジェクトまたはMarionette全体の動作を置き換えることが比較的単純で非常に柔軟な状況を作り出します。「単純な」構成API呼び出しを犠牲にして、独自のコードを提供して、物事を思い通りに機能させる柔軟性を提供します。

マリオネットには「構成」または「オプション」APIはありません。しかし、マリオネットの動作を簡単に変更できる、明確なシグネチャを備えた非常に特定の目的を果たす多数のメソッドがあります。


16
なぜこれが最も高い評価された回答なのですか?それは質問に答えるイベントではありません-それは基本的にマリオネットの歴史/広告です...
Jess Telford

@JessTelfordあなたは質問をもう一度読みたいかもしれません、それはそれにかなり良い答えの1つです。
mor

@mor問題は次のとおりですWhat is the benefit of choosing one over the other?-この答えはMarionette [...] has a few very distinct goals and ideals in mindです。質問が「これらの各フレームワークで何できるか説明してください」だった場合、確かに、これは素晴らしい答えです。しかし、そうではありませんでした。そして、そうではありません。
Jess Telford

@JessTelford質問は明らかに複数の回答を求めています。これは、マリオネットが対処する長所と問題を述べています。質問を読んだ後、私はこの答えが本当に役に立ちました。私の意見では必ずしも最良ではありませんが、それでもそれは良い答えです。ああ、と疑問があります:What are the strengths and weaknesses of...
mor

@mor誤解しないでください。これは、Marionetteの非常に完全で明確な説明です。それが質問に答えるとは思わない。とにかく、賛成票はこれが良い答えであるということです。
Jess Telford、2013年

25

私は現在、テンプレートエンジンとしてレイアウトマネージャーモジュールとハンドルバーを備えたバックボーンを使用しており、既存のGrailsバックエンドを使用して小さなアプリケーションを簡単に設定できます。レイアウトマネージャーの使用を開始する前に、マリオネットとチャップリンについて読んだところ、どちらも非常に強力で複雑に思えました。次に、なぜbackbone.jsを最初に選択したのかを思い出しました。これらのすべてのフレームワークは、バックボーンが設計によって除外したものを追加しています。フレームワークが悪いと言っているわけではありませんが、もっと複雑なものが必要な場合は、ember.jsやsproutcoreなどの他のプロジェクトを試してみます。開発者の目標を念頭に置いて作成された独自のコードベースがあるためです。ここには、別のフレームワークの上にフレームワークがあります。もちろん、バックボーンはアプリケーションを構築するためだけでなく、より強力なライブラリを作成するためのバックボーンでもあります。しかし、レイアウトマネージャーがなく、ビューをネストする可能性がないため、ビューレイヤーだけが問題だと思います。レイアウトマネージャーを使用すると、そのギャップがかなり埋められます。

だから、あなたの質問に対する私の答えは、バックボーンをそのまま使用することから始めて、何が欠けているのか、そしてフレームワークについてあなたが何を期待していたのかを自問してください。バックボーンから取り残されているものが多すぎる場合は、他のフレームワークでそれらを検索し、ニーズに最も近いものを選択します。それでも選択に自信がない場合は、バックボーンが適切ではなく、他のソリューションを探す必要があります(ember.js、sproutcore、ExtJs、JavaScript MVCはすべて適切です)。クライアントアプリの作成経験がある場合、適切なフレームワークを選択するために、そこにあるすべてのフレームワークについての経験は実際には必要ありません(もちろん、あなたにとって)


13

私はBackbone.jsで構築されたさまざまなフレームワークを研究し、HauteLookでのプロジェクトのためにVertebraeを構築しました。プロジェクトの目標には、動的スクリプトの読み込み、AMDモジュール形式、依存関係の管理、ほとんどがオープンソースのライブラリを使用したビルド、パッケージ内のコードの整理、1つ以上の単一ページアプリ向けの最適化とビルド、完全にキャッシュされたサーバーでのホスト(サーバーなしなど)が含まれます。データ用のAPIのみを使用する-サイドスクリプティング、そして私にとって最も面白いのは、プロジェクトのビヘイビア駆動開発を使用することです。プロジェクトの説明は次の場所にありますhttp : //www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/

私たちの問題:

選択されたライブラリー(jQuery、Underscore.js、Backbone.js、RequireJS、Mustache)は、モジュールのロード、依存関係の管理、アプリケーション構造(モデル、コレクション、ビュー、ルート用)、APIとの非同期相互作用、非同期動作を管理するためのさまざまなユーティリティとオブジェクトを提供します、たとえば(約束)遅延、コールバック。フレームワークを完成させるために必要な残りのロジックは次のとおりです。

  • シングルページアプリケーションの状態を管理するためのオブジェクト(モデル)。
  • ビューを表示、配置/移行、クリアするレイアウトマネージャー、および
  • ルートに応答し、アプリケーションの状態を取得/設定し、作業をレイアウトマネージャーに引き渡すコントローラー。

当社のソリューション(Vertebraeで実装):

アプリケーション状態マネージャー -

アプリケーションマネージャーはデータをメモリに保存し、データをブラウザーストレージに永続化して、共通のデータ/メタデータのリソースを提供します。以前のインタラクション(選択されたタブ、適用されたフィルターなど)に基づいてページビューを再構築するためのデータ(状態)も提供します。アプリケーション状態マネージャーは、リソースが状態を取得するための戦略を提供します。ステートマシンとして機能することを意味します。

レイアウトマネージャー -

レイアウトマネージャーには、1つ以上のビューと、各(レンダリングされた)ビューのドキュメント(DOM)宛先があります。ページは多くのビュー間で遷移する可能性があるため、レイアウトマネージャはビューステート(追跡、レンダリング、非レンダリング、表示、非表示など)を追跡します。レイアウトマネージャを使用して、サイトの訪問者がリクエストする可能性が非常に高い(ページのタブの変更など)ビューを遅延読み込みしてレンダリングすることができます。ビューステート間の遷移は、このオブジェクトによって管理されます。レイアウト全体をクリアして、ビューオブジェクトとそのバインディングを削除し、これらのオブジェクトをガベージコレクション用に準備(メモリリークを防止)できます。レイアウトマネージャーは、ビューステートをコントローラーと通信します。

コントローラ -

コントローラーオブジェクトは、ルートハンドラー関数によって呼び出され、関連する状態(アプリケーションモデル)を取得してページ(レイアウト)を生成します(ルートが変更されたときの状態の設定も行います)。コントローラーは、要求されたページの依存データ(モデル/コレクション)と構築されたビューオブジェクトをレイアウトマネージャーに渡します。副作用として、コントローラーを使用すると、ルートオブジェクトが肥大化し、もつれるのを防ぎます。ルートはコントローラーにマップする必要があります。コントローラーはページビューを開始し、ルート処理機能を無駄なく維持します。

Todosアプリは開発モードでホストされ、Herokuで最適化されています...

他のフレームワークにおける概念の多くが借りている、例えばDerickベイリーによって指摘されているように、プレビューメモリリークにDestoryはビューへの必要性- http://lostechies.com/derickbailey/。Tim Branyenによるレイアウトマネージャhttp://tbranyen.github.com/backbone.layoutmanager/

要約すると、Backbone.jsはアプリケーションのツールであることを意味します。Backbone.jsライブラリは、アプリケーションを構築するために必要なすべてのアーキテクチャを提供するわけではありませんが、APIとの強力な相互作用と堅牢なコード構造を提供します...ビュー(コントローラーのようにも機能します)とデータレイヤーのモデルとコレクション、最後にルート。私たちは、プロジェクトの目標を達成するためにVertebraeを構築し、他のユーザーが使用、学習、またはその他を行うためのフレームワークとしてコードを抽出することを決定しました。

私の意見におけるあなたの質問への答えは、プロジェクトの目標がBackboneで構築されたフレームワークの1つにぴったり適合し、それ以外の場合は独自のフレームワークを構築した場合、すべてのフレームワークから学び、目標を達成するために必要なものを使用することですコミュニティによって共有されている素晴らしい例があります。または、アプリケーションの方向に少し迷った場合は、Ember.jsなど、より独断的で構造化されたものを選択してください。すばらしい点は、JavaScriptで(MVX)MVCのようなパターンを使用してコーディングするのに役立つ選択肢が豊富にあることです。


詳細な回答ありがとうございます。
danikoren

13

Lucaフレームワークは、BenchPrepで働いていたときに開発しました。このフレームワークを使用して、backbone.jsライブラリの上にいくつかの大きな単一ページアプリを開発しました。

私は数年前にExtJSを使用しており、ビューをスタンドアロンコンポーネントとして開発し、コンテナービューを使用して他のコンポーネントと結合するコンポーネント駆動型アーキテクチャなど、そのフレームワークから私のお気に入りの概念を盗みました。また、構成に大きく基づいているため、Lucaでアプリを開発することは、JSONでオブジェクトを記述するのとよく似ています。

このアプローチの利点の1つは、Backboneの拡張機能を使用するわずかな変更のみで、複数のアプリ間またはアプリ内の異なる場所でコンポーネントを再利用できることです。また、JSON構成をわずかに調整するだけで、コンポーネントのさまざまなレイアウト/プレゼンテーションを試すのも非常に簡単です。

幅広いヘルパー/ユーティリティ関数に加えて、Lucaには、複雑なUIを構築するために考えられるあらゆる方法で組み合わせることができる、より高いレベルのバックボーンデリバティブが多数付属しています。

ビュー、コンポーネント、コンテナ

  • 拡張モデル、ビュー、コレクション、ルータークラス
  • モデル、コレクション、ビュー、アプリケーション、およびそれぞれのマネージャー間の通信を容易にする構成オプション。
  • コンテナー(分割/列レイアウト、グリッドレイアウト、タブビュー、カード/ウィザードビュー)
  • すべての標準フィールドコンポーネントを備えたFormView、およびBackbone.Modelと同期するためのヘルパー
  • Luca.Collectionからスクロール可能なグリッド要素を生成するためのGridView
  • CollectionView、コレクションに基づいてビューを生成する
  • ツールバー/ボタン

Twitter Bootstrapスタイルと無料のマークアップ

  • Lucaは、Twitterブートストラップフレームワークで非常にうまく機能します。Luca.enableBootstrap = trueを設定し、CSSを含めるだけで、コンポーネント(タブビュー、ツールバー、ボタン、フォーム、フィールド、グリッドなど)は自動的にTwitter Bootstrap互換のマークアップとCSSクラスの規則を使用します。
  • レイアウトにグリッドシステムを使用し、ブートストラップの基本cssクラスのほとんどにインテリジェントな方法で応答します
  • Luca.ViewportおよびGridLayoutコンポーネントは、ブートストラップのレスポンシブ、流動的、または静的グリッドシステムで動作するように設定されています。
  • 設定可能なバックボーンビューとして表すために、Twitterブートストラップコンポーネントの1対1の一致を提供することを目的としています

アプリケーションコンポーネント

  • Backbone.Modelベースの状態マシンは、アプリケーション制御フローのスタイルとしてゲッター/セッターメソッドと属性変更イベントを提供します
  • Backbone.RouterイベントまたはState Machineイベントに応答してアプリのページを非表示/表示する統合コントローラーコンポーネント
  • 作成したコレクションを追跡し、それらをスコープし、グループ化し、デフォルトのパラメーターを割り当てることができるIntegrated Collection Manager
  • Backbone.Eventと同じくらい簡単にプッシュできるようにするWebSocketサービスの上の抽象化レイヤーであるSocket Manager
  • そのようなイベントに応答することに関心のあるコンポーネントで名前付きのキーイベントをトリガーするキーボードイベントルーター

コレクションとモデルの機能強化

  • コレクションはbackmon -queryに基づいており、mongoDbとよく似たクエリインターフェイスを提供します
  • collection.localStorage = trueを設定するだけで、ローカルストレージBackbone.syncを有効にします
  • ページ読み込み時にデータがブートストラップされるコレクションの自動生成
  • キャッシュされたメソッド/計算されたプロパティ。コレクションメソッドの結果をキャッシュし、コレクションまたはそのモデルの変更/追加/削除イベントに応じてキャッシュを期限切れにする
  • モデルの計算されたプロパティ。複雑な関数に基づいて属性を構築し、変更に応じて計算された値を自動的に更新します

イベントとフック

Lucaコンポーネントは、標準のBackboneコンポーネントと比較して、それらが発行するイベントに関してより寛大です。これらはbefore:initialize、after:initialize、before:render、after:render、activation、first:activation、deactivation、first:deactivationのようなイベントを発行します。これにより、コンポーネントの動作をより細かく調整できます。さらに、ビューの@hooksポータリティでイベントを定義することにより、同様の名前の関数が存在する場合は自動的に呼び出されます。これにより、読みやすさを向上させる多くのコールバックスタイルコードが防止されます。

Luca.Eventsクラスを構成して、イベントをグローバルのパブリッシュ/サブスクライブチャネルにパブリッシュすることもできます。これにより、大規模なアプリケーションの構築が容易になり、モジュール間の通信が容易になります。

ルビーの宝石

Lucaは、RailsおよびSinatra APIに対して動作するように特別に開発されたため、現在、特定のスタック用に最適化されていますが、特定のサーバーにロックされることはありません。

Lucaは、アセットパイプラインで動作するように構成されたRuby Gemの一部として、またはダウンロード可能なJSファイルとして配布されます。

RailsやSinatraを使用する必要はありません。しかし、もしそうなら、私は多くの有用なものを含めました:

  • 拡張子が.lucaのファイルは、JSTスタイルの変数補間でHAMLとして処理されます。(.jst.ejs.hamlに相当)アセットパイプライン
  • ブラウザ用のテストハーネス、または多くのバックボーンおよびアンダースコアテストヘルパーとともに、ヘッドレスジャスミンベースのユニットテスト。
  • Lucaに同梱される開発ツールセットのAPIエンドポイント(これについては後で詳しく説明します)
  • 最小構成でLuca.CollectionのスキーマレスストレージエンジンとしてRedisを使用できるようにするAPIエンドポイント

開発ツール

  • Lucaアプリケーションは、Lucaアプリケーションとコンポーネントの監視、検査、デバッグに役立つLuca固有のヘルパーとコマンドを使用して、ブラウザー内のコーヒースクリプトコンソールを有効にすることができます。

CoffeeScriptを利用したブラウザ開発コンソールのLucaの例

  • Rails GemとLucaのCodeMirrorベースのコンポーネントエディターの助けを借りて、Luca Frameworkのソースコードとアプリケーション固有のコンポーネントをCoffeescriptを使用してブラウザーで直接編集できます。編集に応じて即座にフィードバックが表示され、更新されたプロトタイプで影響を受けるオブジェクトのインスタンスが更新され、変更をディスクに保存できます。

  • Component Testerは、アプリケーションを構成するコンポーネントを個別に操作するためのライブサンドボックスです。コンポーネントのプロトタイプを変更し、依存関係を設定し、コンポーネントを構成するためのツールを提供します。コンポーネントは、編集を行うたびにすぐに再レンダリングされます。コンポーネントが生成するマークアップやCSSをブラウザで直接表示して編集し、変更をすぐに確認できます。これは非常に貴重な実験ツールになります。

  • Component Testerは間もなくJasmineと統合されるため、コンポーネントの単体テストの結果をコードを編集しながらリアルタイムで確認できます

コンポーネントテスターのスクリーンショット

Lucaは進行中の作業ですが、安定したAPI(まだ1.0ではありません)を維持しており、いくつかの大規模なプロダクションアプリで使用されています。それは間違いなく非常に独断的なフレームワークですが、私はそれをよりモジュール化することに取り組んでいます。私はドキュメントとサンプルコンポーネントに積極的に取り組んでいます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.