web-dev-qa-db-ja.com

MVVM対ブロックパターン

私はFlutterで新しいアプリを作成しています、そして私はそれを設計しようとしています、ビジネスロジックをビューから分離します。

私はBlocとMVVMについて読みました(私は他のパターンがあることを知っていますが、これらは私が好むものでした)ですが、私の違いはわかりません。彼らは私にほとんど同じように見えます。

誰かが私がそれらを理解するのを助けることができるのですか?

12
niegus

BLOCとMVVMがBLOCが導入されたときに異なるように見えましたが、その差がBLOCの実装が時間の経過とともに変化したので消えた。 今の唯一の実際の違いは、Blocは別のプレゼンテーションロジックとビジネスロジックを指定しない、または少なくとも明らかな方法ではそれをしません。プレゼンテーションロジックはインタラクションを理解したレイヤーです。 UI要素とアプリケーションの事業部門(MVPのプレゼンタージョブ)の間。いくつかのBloc実装はプレゼンテーションロジックをBlocに入れる。

Blocでの新しいものは、それが方法を公開してはいけません。代わりに、それはその露出された流しのあるシンクまたはシンクを通してのみのイベントを受け入れるでしょう。これは、Angular DART Web AppsとFlutter Mobile Appsの間のコード再利用のためのものでした。この概念は、Angular DART Webアプリを書いていないため、最近放棄され、通常の方法よりも便利ではありません。現在公式BLOCパッケージのブロックは、良いOL 'VMのようにメソッドを公開します。

VM _が複数のストリームを公開することができる間、Blocは完全な状態オブジェクトのストリームを公開する必要があると言う人もいますが、これは真ではありません。一連の州の流れを露出するのは、両方のアプローチでは良い習慣です。最初に、公式のGoogle Blocプレゼンテーションは、複数の出力ストリームを使用して実装されたブロックを提示しました。

物事のような興味深い違いは、BlocがUIだけでなく、アプリケーションのさまざまな部分でもイベントを通して通信する必要がありました。たとえば、FireBase通知を受信した後やリポジトリデータが変更された後にイベントを受け取る必要があります。これは面白いようですが、そのような実装を見たことがない。技術的な観点からは奇妙なことになります(リポジトリはそれを使用しているすべてのBlocのすべてのBlocのことについて知っておく必要があります)。イベントバスに基づいているだろうそのような実装を試すことを考えていますが、それは完全にトピックではありません:)

2