2016-08-25 9 views
2

OOの世界では、ネットワークをリッスンして対話できるようにTorrentオブジェクトを作成したいと考えています。それは持つEventEmitterを継承すると、次のようなものになります。Cycle.js再利用可能なモジュールを作成する

var torrent = new Torrent(opts) 
torrent.on('ready', cb) // add torrent to the UI 
torrent.on('metadata', cb) // update data in the UI 

をし、私もそれが物事を行うことができます。

torrent.stop() 
torrent.resume() 

その後の進路私はメモリからの急流を削除したいと思うならば、私はすることができますtorrent.destroy()に電話してください。

このOOのアプローチのクールな点は、この機能を独自のnpmモジュールに簡単にパッケージ化し、テストして、使いやすくきれいな再利用可能なAPIをユーザーに提供できることです。

私の質問は、Cycle.jsアプリでこれをどのように達成するのですか?

ドライバを作成すると、多くのトレントを作成し、独自の独立したリスナーを持つ方法は不明です。また、他のCycle.jsアプリで簡単に再利用できるように機能をパッケージ化したいと考えています。

答えて

2

"imperative code"と書いてあるように、あなたはそれについて考えている問題を解決しようとしているようです。 独自のリスナーでTorrentインスタンスを作成することは、サイクルコンポーネントで使用する必要があるものではないと思います。

私は、Torrentモジュールを作成し、そのソースとシンクが何であるかを理解するという点で、別の方法をとっていきます。このモジュールを再利用して公開する必要がある場合は、ストリームを引数として受け取る関数としてモジュールを作成できます。たぶんTodoMVC Task component(これは親コンポーネントで使用される)と似ています。

このモジュールは純粋な関数として作成できるので、少なくとも簡単にテストすることができます。

この実装はもちろん要件に依存しますが、モジュールとの通信はストリームでのみ行われ、宣言的なのでstop()やdestroyed()のようなメソッドは必要ありません他の場所。

+0

はい、私は機能的な方法ではなく、必要不可欠でそれについて考えて問題を抱えていると思います。だから、あなたが私がソースを送り、トレントのインスタンスを作成できるTorrentDriverを持っていると言っているのですか?私の実際の「トレントオブジェクト」がどこにあるのかを理解するのは混乱します。それはどこかの記憶にある必要があるからです。 –

+0

この関数(とおそらくはドライバではない)はインスタンスを返さないでしょう - それは "機能的な方法"でしょう。ストリームを返すだけで、それを使用して反応させることができます。したがって、ソースはトレントを作成する必要があります(いくつかのDOMイベントやアクションなど)、シンク(返されたストリーム)は、あなたのアプリで使用できる何らかの結果となります(DOMやいくつかのデータストリーム)。それはあなたが達成したいものに本当に依存しますが、一般的にはインスタンスを作成し、必要なようにそれらを使用することは、何かサイクルコンポーネントが行うことではありません... – domagojk

0

どうすればテストできますか?

cycle.jsでは、インテントモデルとビュー機能を持つコンポーネントを作成します。

intent()をテストすると、指定された入力ストリームに対して、必要なアクションのストリームが生成されます。モデルの場合は、httpとアクションのストリームをテストし、必要な状態を取得し、ビューでは、必要なVDomを取得した状態をテストします。

cycle.jsのトリッキーなビットは、関数を渡すので、 'this'キーワードを使用する通常のJavaScriptオブジェクトは、 'this'コンテキストの問題のために問題にはなりません。 cycle.jsを使用していて、Isolate、Onionify、またはCollectionsで使用するためのJSクラスを作成する可能性が高いと思われる場合は、間違った方向に行きます。私は多くのトレント

サイクル

の作成に取り掛かるだろうか MDN docs about 'this'

参照してください。jsの人々は、このようなもののグループに対処するいくつかの方法を持っています。

  • Webコンポーネント
  • スタンガとsimilarsでラップsubapp: このticketは、そのために働くかもしれないいくつかのことを説明しています。
  • Cycle Collections
  • Cycle Onionify
関連する問題