2017-12-04 9 views
0

私はview modelクラスを持っています。私はこれらのクラスをテンプレートにバインドします。角4:テンプレートの「集合」プロパティを表示する(一方向)

場合によっては、これらのクラスにプロパティを追加する必要があります(JSONオブジェクトのプロパティに加えて)。例えば、私が注文の合計を表示する必要があります:

public total(): number { 
    return this.price * this.count; 
} 

In this post私はこのような性質への結合について学びました。

しかし、Angularと一直線になる可能性がある他の選択肢があるかどうかは疑問です。たとえば、新しいプロパティをすべて作成するのではなく、この種の「集約」プロパティを表示するためにパイプを使用できるかどうかは疑問です。

私の質問は - この問題を解決するにはどのような角度の方法ですか?

+1

あなたがやっていることは完全に「角度」です。私はあなたがそれをとてもうまくやっていると言います。ビジネスロジックは、あなたのやっていることであるあなたのクラスに保持する必要があります。代替手段を探す必要はありません。 –

+2

パイプを乱用しないでください。パイプは、カンマを数値に追加したり、通貨や日付として書式を設定するなど、フォーマッタとして主に見られる必要があります。 「角度のある角度」は、あなたが非常に透明で明白なことをすることです。実際の計算の場合はパイプがそれを行う素晴らしい方法ではありません。 gettersを使うことは角度的なアプローチです。しかし、より良い方法や洗練された方法は、変更検出に頼るのではなく、計算する必要があるときにこれらの「集計」プロパティを計算するロジックを構築することです。 – bryan60

答えて

1

これは、集計の計算に費やすコストと、その集計の数がビューに共存するかどうかによって異なります。

  • パフォーマンスのオーバーヘッドが無視できる場合は、あなたのソリューションは、書いて、保守が容易であることから、私には正常に見える、と値があなたの部分の少しの努力で正しいことが保証されます。

  • パフォーマンスのオーバーヘッドが重要な場合は、集計をキャッシュし、入力が変更されるたびに再集計します。この追加ロジックは、RXJSの助けを借りても非常に複雑になる可能性がありますが、許容可能な性能を達成するためには必要です。測定可能な衝撃性能(著しくおろか)べきではない変化検出の実行ごとに単一の乗算を行う、あなたの例では

、が、すべての変更検出ランで10,000オブジェクトのリストをフィルタリングするために疑問だろう、合計10,000件の注文アイテムを計算することができます。

疑問がある場合は、簡単なアプローチを実装し、パフォーマンス目標を満たしているかどうかを測定します。またはドナルド・クヌースの言葉を引用します

プログラマがあり、デバッグ、メンテナンスときのことを考え、またはそのプログラムの重要度の低い部分の速さ、気にせ、そして効率でこれらの試みは、実際に強い負の影響を与える膨大な時間を無駄に考慮される。私たちは時間の約97%という小規模な効率を忘れるべきです。早すぎる最適化はすべての悪の根源です。しかし、私たちはその重要な3%の機会を逃すべきではありません。

+0

お見積もりありがとうございます! – user11081980

関連する問題