2017-09-15 18 views
0

私は2種類のコンポーネントを持っています。どちらのみ使用とHTML5キャンバス要素を含むが、チャート上に異なるタイプのデータを表示する必要がありますバックグラウンドアプリケーションロジックの最適なソリューションは?

  1. 成分A(しか1これらの)
  2. 成分B(0これらの4 )

両方のコンポーネントでは、2つのデータセットの最初のデータエントリのdateTimeが必要ですが、最後のエントリのdateTimeは、それぞれのデータセットから得られます。

成分AがコンポーネントB.

からその最初のエントリの日付を必要とする現在、私はこのようにそれを行う:

成分Bは、独自のデータセットから日付の限界を見つける方法があります。オブザーバーパターン&の科目を使用して、返された日付をサービスを通じてコン​​ポーネントAにブロードキャストします。

この問題は、カップリングが突然かなり緊密になることを意味します。コンポーネントAを最初に初期化することはできません。なぜなら、最初にBを計算する必要があるからです。どちらのコンポーネントも理想的には、初期化してデータを同時に表示/共有し、それを継続する必要があります。たとえば、ユーザーが1つのチャートをスクロールすると、他のすべてのコンポーネントもスクロールする必要があります。

これは、これらのコンポーネントの上に余分なレイヤーを追加したかった理由です。もしそうならコントローラ。

でも、私は最高の何を把握することはできません。


  • 入力などの外部データを取ることができ、共有サービスを?
  • コンテナコンポーネントですか? (トランスクルー)
  • 別の成分、成分C& Bはの子であること?

  • 私はまだAngular 2が新しくなっていますが、将来のメンテナンス/開発にはどのアプローチが最適かを知るのは難しいですか?


Iは、親のような別の通常のコンポーネントを作成するに向かって引かれ、そしてこのコンポーネント送信を有し、必要に応じてその子(& B)に/からデータを受信されています。

「ベストプラクティス」と空の「ロジックシェル」のようなコンポーネントを使用することができるかどうか不確かです。私はここでそこそこ読んでみましたが、たくさん見つけましたが、私の質問に正確な答えを得ることはできません。この知識をすべて理解して自分自身で答えるまでには時間がかかりますので、誰かが私に助けを与えることができればと願っています。

PS:私の角のあるアプリケーションは、より大きなアプリケーションでは子コンポーネントになり、他の親のcompからそのデータを取得します。

答えて

0

論理をサービスに入れないのはなぜですか? サブサービスを親サービスに注入することによって、サービス階層を設定することもできます。

ロジックがUI /相互作用に関連していない場合は、再利用可能なサービスに配置する必要があります。あなたのロジックがUIに関連している場合は、AとBの間のメディエータとして機能する親コンポーネントを設定することができます(それぞれの入力/出力パラメータに作用します)。

懸念を分けておくことをお勧めします。

  • AとBの両方は、出力を必要とする他のコンポーネントを気にする必要はありません。 Angularにはそのための入力/出力パラメータがあります。

  • 一般的な日時計算のものをコンポーネントに入れないでください。サービスを通じて再利用可能にする。

  • インターフェイスと注入を導入してカップリングを緩めてください。

更新:あなたは(またはセッターを、それがあまり表現力である)メソッドを使用して、入力を渡す必要がありますので

サービスのみ、注射用のコンストラクタのパラメータを使用する必要があります。 任意のJSONオブジェクトを渡すには、任意のパラメータを使用できます。しかし、あなたのjsonが特定の構造に従っている場合は、インターフェースを定義することができます。

public doStuff(input: any): any { } 

又は

interface IMyDataContract { 
    dateField: string; 
} 

public doStuff(input: IMyDataContract): any { } 
+0

マイロジックはHTML5、キャンバス要素にデータを描画するために、JSONデータセットを検索/操作に関連しています。サービスを利用できるはずですが、JSONデータを入力としてサービスに渡すのに問題がありました。 お返事ありがとうございました。サービスソリューションをもう一度試してみます。 – PDAWG

+0

メソッドとパラメータを定義するだけです。あなたのサービスには注入可能なコンストラクタパラメータが含まれているだけです – mbnx

+0

私は答えを更新しました。 – mbnx

関連する問題