BehaviorSubjectとObservable?

757
Kevin Mark 2016-09-15 05:14.

Angular RxJsパターンを調べていますが、aBehaviorSubjectObservable。の違いがわかりません。

私の理解では、aBehaviorSubjectは時間の経過とともに変化する可能性のある値です(サブスクライブでき、サブスクライバーは更新された結果を受け取ることができます)。これは、のまったく同じ目的のようObservableです。

いつObservablevsを使用しBehaviorSubjectますか?BehaviorSubjectoverObservableまたはその逆を使用することには利点がありますか?

10 answers

1069
Shantanu Bhadoria 2016-10-25 18:53.

BehaviorSubjectはサブジェクトの一種であり、サブジェクトは特別なタイプのオブザーバブルであるため、他のオブザーバブルと同じようにメッセージをサブスクライブできます。BehaviorSubjectのユニークな機能は次のとおりです。

  • サブスクリプションを受け取っていない場合でも、常に値を返す必要があるため、初期値が必要です。 next()
  • サブスクリプション時に、サブジェクトの最後の値を返します。通常のオブザーバブルは、受信したときにのみトリガーされますonnext
  • このgetValue()メソッドを使用すると、いつでも、監視不可能なコードでサブジェクトの最後の値を取得できます。

観察可能なものと比較した対象のユニークな特徴は次のとおりです。

  • オブザーバブルであることに加えてオブザーバーであるため、サブジェクトにサブスクライブするだけでなく、サブジェクトに値を送信することもできます。

さらに、のasObservable()メソッドを使用して、行動サブジェクトからオブザーバブルを取得できますBehaviorSubject

BehaviorSubjectBehaviorSubjectは特定の品質のオブザーバブルであるため、Observableは汎用であり、技術的にはObservableのサブタイプです。

BehaviorSubjectの例:

// Behavior Subject

// a is an initial value. if there is a subscription 
// after this, it would get "a" value immediately
let bSubject = new BehaviorSubject("a"); 

bSubject.next("b");

bSubject.subscribe(value => {
  console.log("Subscription got", value); // Subscription got b, 
                                          // ^ This would not happen 
                                          // for a generic observable 
                                          // or generic subject by default
});

bSubject.next("c"); // Subscription got c
bSubject.next("d"); // Subscription got d

通常の件名の例2:

// Regular Subject

let subject = new Subject(); 

subject.next("b");

subject.subscribe(value => {
  console.log("Subscription got", value); // Subscription wont get 
                                          // anything at this point
});

subject.next("c"); // Subscription got c
subject.next("d"); // Subscription got d

オブザーバブルは、SubjectBehaviorSubjectを使用して作成できますsubject.asObservable()

唯一の違いは、next()メソッドを使用してオブザーバブルに値を送信できないことです。

AngularサービスではBehaviorSubject、コンポーネントのサブスクリプション以降に新しい更新がない場合でも、サービスを消費するコンポーネントが最後に更新されたデータを確実に受け取るように、Angularサービスがコンポーネントと動作サブジェクトの前に初期化されることが多いため、データサービスに使用します。

210
Vamshi 2017-06-17 17:19.

観察可能:オブザーバーごとに異なる結果

1つの非常に重要な違い。Observableは単なる関数であるため、状態はありません。したがって、新しいObserverごとに、observableの作成コードが何度も実行されます。これにより、次のようになります。

コードはオブザーバーごとに実行されます。HTTP呼び出しの場合、オブザーバーごとに呼び出されます

これは大きなバグと非効率を引​​き起こします

BehaviorSubject(またはSubject)は、オブザーバーの詳細を格納し、コードを1回だけ実行して、すべてのオブザーバーに結果を提供します。

例:

JSBin:http://jsbin.com/qowulet/edit?js、console

// --- Observable ---
let randomNumGenerator1 = Rx.Observable.create(observer => {
   observer.next(Math.random());
});

let observer1 = randomNumGenerator1
      .subscribe(num => console.log('observer 1: '+ num));

let observer2 = randomNumGenerator1
      .subscribe(num => console.log('observer 2: '+ num));


// ------ BehaviorSubject/ Subject

let randomNumGenerator2 = new Rx.BehaviorSubject(0);
randomNumGenerator2.next(Math.random());

let observer1Subject = randomNumGenerator2
      .subscribe(num=> console.log('observer subject 1: '+ num));
      
let observer2Subject = randomNumGenerator2
      .subscribe(num=> console.log('observer subject 2: '+ num));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.3/Rx.min.js"></script>

出力:

"observer 1: 0.7184075243594013"
"observer 2: 0.41271850211336103"
"observer subject 1: 0.8034263165479893"
"observer subject 2: 0.8034263165479893"

を使用Observable.createすると、オブザーバーごとに異なる出力が作成されたBehaviorSubjectが、すべてのオブザーバーに同じ出力が得られたことがわかります。これは重要。


その他の違いを要約しました。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃         Observable                  ┃     BehaviorSubject/Subject         ┃      
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ 
┃ Is just a function, no state        ┃ Has state. Stores data in memory    ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Code run for each observer          ┃ Same code run                       ┃
┃                                     ┃ only once for all observers         ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Creates only Observable             ┃Can create and also listen Observable┃
┃ ( data producer alone )             ┃ ( data producer and consumer )      ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃ Usage: Simple Observable with only  ┃ Usage:                              ┃
┃ one Obeserver.                      ┃ * Store data and modify frequently  ┃
┃                                     ┃ * Multiple observers listen to data ┃
┃                                     ┃ * Proxy between Observable  and     ┃
┃                                     ┃   Observer                          ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
71
Kedar9444 2018-11-18 11:47.

オブザーバブルサブジェクトは両方ともオブザーバブルであり、オブザーバブルがそれらを追跡できることを意味します。しかし、どちらにもいくつかの独特の特徴があります。さらに、合計3種類の科目があり、それぞれに独自の特徴があります。それぞれを理解してみましょう。

ここstackblitzで実際の例を見つけることができます。 (実際の出力を確認するには、コンソールを確認する必要があります)

Observables

彼らは冷たいです:彼らが少なくとも1人のオブザーバーを持っているとき、コードは実行されます。

データのコピーを作成します: Observableは各オブザーバーのデータのコピーを作成します。

単方向:オブザーバーはobservable(origin / master)に値を割り当てることができません。

Subject

それらはホットです。オブザーバーがなくても、コードが実行され、値がブロードキャストされます。

データの共有同じデータがすべてのオブザーバー間で共有されます。

双方向:オブザーバーはobservable(origin / master)に値を割り当てることができます。

サブジェクトを使用している場合、オブザーバーの作成前にブロードキャストされるすべての値を見逃します。だからここにリプレイサブジェクトが来る

ReplaySubject

それらはホットです。オブザーバーがなくても、コードが実行され、値がブロードキャストされます。

データの共有同じデータがすべてのオブザーバー間で共有されます。

双方向:オブザーバーはobservable(origin / master)に値を割り当てることができます。プラス

メッセージストリームの再生:再生の件名をいつサブスクライブしても、ブロードキャストされたすべてのメッセージを受信します。

サブジェクトとリプレイサブジェクトでは、初期値をobservableに設定することはできません。だからここに行動の主題が来る

BehaviorSubject

それらはホットです。オブザーバーがなくても、コードが実行され、値がブロードキャストされます。

データの共有同じデータがすべてのオブザーバー間で共有されます。

双方向:オブザーバーはobservable(origin / master)に値を割り当てることができます。プラス

メッセージストリームの再生:再生の件名をいつサブスクライブしても、ブロードキャストされたすべてのメッセージを受信します。

初期値を設定できます。オブザーバブルをデフォルト値で初期化できます。

29
Md Ayub Ali Sarker 2016-09-15 05:27.

Observableオブジェクトは、プッシュベースのコレクションを表します。

ObserverおよびObservableインターフェースは、プッシュベースの通知のための一般化されたメカニズムを提供します。これは、オブザーバーデザインパターンとも呼ばれます。Observableオブジェクトは、通知を送信するオブジェクト(プロバイダー)を表します。Observerオブジェクトは、それらを受け取るクラス(オブザーバー)を表します。

Subjectクラスは、オブザーバーとオブザーバブルの両方であるという意味で、ObservableとObserverの両方を継承します。サブジェクトを使用してすべてのオブザーバーをサブスクライブしてから、サブジェクトをバックエンドデータソースにサブスクライブできます。

var subject = new Rx.Subject();

var subscription = subject.subscribe(
    function (x) { console.log('onNext: ' + x); },
    function (e) { console.log('onError: ' + e.message); },
    function () { console.log('onCompleted'); });

subject.onNext(1);
// => onNext: 1

subject.onNext(2);
// => onNext: 2

subject.onCompleted();
// => onCompleted

subscription.dispose();

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.mdの詳細

20
Lukasz Marek Sielski 2017-09-06 04:59.

例に見られないことの1つは、asObservableを介してBehaviorSubjectをObservableにキャストすると、サブスクリプションで最後の値を返す動作を継承することです。

多くの場合、ライブラリはフィールドを監視可能なものとして公開しますが(つまり、Angular2のActivatedRouteのパラメータ)、舞台裏でSubjectまたはBehaviorSubjectを使用する場合があるため、これは注意が必要です。彼らが使用するものは、購読の振る舞いに影響を与えます。

ここを参照してくださいhttp://jsbin.com/ziquxapubo/edit?html,js,console

let A = new Rx.Subject();
let B = new Rx.BehaviorSubject(0);

A.next(1);
B.next(1);

A.asObservable().subscribe(n => console.log('A', n));
B.asObservable().subscribe(n => console.log('B', n));

A.next(2);
B.next(2);
12
Zameer Ansari 2018-01-24 20:44.

観測可能で、一方、あなただけ購読することができ、被験者が両方のパブリッシュおよびサブスクライブすることができます。

したがって、サブジェクトを使用すると、サービスをパブリッシャーとサブスクライバーの両方として使用できます。

今のところ、私はあまり得意ではないのでObservable、の例だけを共有しますSubject

AngularCLIの例でもっとよく理解しましょう。以下のコマンドを実行します。

npm install -g @angular/cli

ng new angular2-subject

cd angular2-subject

ng serve

の内容を次のように置き換えますapp.component.html

<div *ngIf="message">
  {{message}}
</div>

<app-home>
</app-home>

コマンドng g c components/homeを実行して、ホームコンポーネントを生成します。の内容を次のように置き換えますhome.component.html

<input type="text" placeholder="Enter message" #message>
<button type="button" (click)="setMessage(message)" >Send message</button>

#messageここではローカル変数です。のクラスにプロパティmessage: string; を追加しますapp.component.ts

このコマンドを実行しますng g s service/message。これにより、でサービスが生成されsrc\app\service\message.service.tsます。このサービスをアプリに提供します

にインポートSubjectMessageServiceます。件名も追加します。最終的なコードは次のようになります。

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';

@Injectable()
export class MessageService {

  public message = new Subject<string>();

  setMessage(value: string) {
    this.message.next(value); //it is publishing this value to all the subscribers that have already subscribed to this message
  }
}

ここで、このサービスを挿入しhome.component.ts、そのインスタンスをコンストラクターに渡します。これも行いapp.component.tsます。このサービスインスタンスを使用して、の値を#messageサービス関数に渡しますsetMessage

import { Component } from '@angular/core';
import { MessageService } from '../../service/message.service';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent {

  constructor(public messageService:MessageService) { }

  setMessage(event) {
    console.log(event.value);
    this.messageService.setMessage(event.value);
  }
}

内部ではapp.component.ts、(メモリリークを防ぐために)サブスクライブおよびサブスクライブ解除しますSubject

import { Component, OnDestroy } from '@angular/core';
import { MessageService } from './service/message.service';
import { Subscription } from 'rxjs/Subscription';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {

  message: string;
  subscription: Subscription;

  constructor(public messageService: MessageService) { }

  ngOnInit() {
    this.subscription = this.messageService.message.subscribe(
      (message) => {
        this.message = message;
      }
    );
  }

  ngOnDestroy() {
    this.subscription.unsubscribe();
  }
}

それでおしまい。

これで、内部#messageに入力された値はすべて内部に出力home.component.htmlされ{{message}}ます。app.component.html

4
Chandru Dev 2018-12-12 03:03.

app.component.ts

behaviourService.setName("behaviour");

behaviour.service.ts

private name = new BehaviorSubject("");
getName = this.name.asObservable();`

constructor() {}

setName(data) {
    this.name.next(data);
}

custom.component.ts

behaviourService.subscribe(response=>{
    console.log(response);    //output: behaviour
});
1
Ronnel Reposo 2020-05-09 17:56.

Observablesは、水が流れるパイプと考えてください。水が流れることもあれば、流れないこともあります。場合によっては、実際には常に水が入っているパイプが必要になることがあります。これを行うには、どんなに小さくても常に水が入っている特別なパイプを作成します。この特別なパイプをBehaviorSubjectと呼びましょう。あなたの地域の給水業者であるあなたは、新しく設置されたパイプがちょうど機能することを知って、夜に安らかに眠ることができます。

技術用語では、Observableに常に値が含まれている必要があるユースケースに遭遇する可能性があります。おそらく、入力テキストの値を時間の経過とともにキャプチャしたい場合は、BehaviorSubjectのインスタンスを作成して、この種の動作を保証できます。


const firstNameChanges = new BehaviorSubject("<empty>");

// pass value changes.
firstNameChanges.next("Jon");
firstNameChanges.next("Arya");

その後、「値」を使用して、時間の経過に伴う変化をサンプリングできます。


firstNameChanges.value;

これは、後でObservablesを組み合わせるときに便利です。ストリームのタイプをBehaviorSubjectとして確認することで、ストリームが少なくとも1回だけ起動またはシグナリングされるようにすることができます。

0
Flash 2019-04-04 00:52.

BehaviorSubject vs Observable:RxJSにはオブザーバーとオブザーバブルがあり、Rxjsはデータストリームで使用する複数のクラスを提供し、そのうちの1つはBehaviorSubjectです。

オブザーバブル:オブザーバブルは、時間の経過に伴う複数の値の遅延コレクションです。

BehaviorSubject:初期値を必要とし、現在の値を新しいサブスクライバーに送信するサブジェクト。

 // RxJS v6+
import { BehaviorSubject } from 'rxjs';

const subject = new BehaviorSubject(123);

//two new subscribers will get initial value => output: 123, 123
subject.subscribe(console.log);
subject.subscribe(console.log);

//two subscribers will get new value => output: 456, 456
subject.next(456);

//new subscriber will get latest value (456) => output: 456
subject.subscribe(console.log);

//all three subscribers will get new value => output: 789, 789, 789
subject.next(789);

// output: 123, 123, 456, 456, 456, 789, 789, 789
0
Yogesh Waghmare 2020-07-24 00:16.

BehaviorSubject

BehaviorSubjectは、ReplaySubjectと同じ機能、subject like、hotに基づいて構築され、以前の値を再生します。

BehaviorSubjectは、BehaviorSubjectに初期値を与えることができるという点で、もう1つの機能を追加します。先に進んで、そのコードを見てみましょう

import { ReplaySubject } from 'rxjs';

const behaviorSubject = new BehaviorSubject(
  'hello initial value from BehaviorSubject'
);

behaviorSubject.subscribe(v => console.log(v));

behaviorSubject.next('hello again from BehaviorSubject');

オブザーバブル

開始するには、通常のObservableを作成するための最小限のAPIを見ていきます。Observableを作成する方法はいくつかあります。Observableを作成する方法は、クラスをインスタンス化することです。他の演算子はこれを単純化できますが、インスタンス化ステップをさまざまなObservableタイプと比較する必要があります

import { Observable } from 'rxjs';

const observable = new Observable(observer => {
  setTimeout(() => observer.next('hello from Observable!'), 1000);
});

observable.subscribe(v => console.log(v));

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ねえNFL、ジョーバロウとカイラーマレーは女性の権利をサポートするために少しの助けを使うことができます

ジョー・バロウロー対ウェイド事件の転覆に対応するNFLは、言葉を言わないことで、腹立たしいが予測可能なPRの結果でした。

別の日、別のヒンジのないLIV記者会見

別の日、別のヒンジのないLIV記者会見

(lから)パット・ペレス、ブルックス・ケプカ、パトリック・リードサウジアラビアのLIVゴルフリーグのさらに別の信じられないほどの記者会見で、スポーツのファンはブルックス・ケプカからでたらめな吐き気と質問回避の驚異的なマスタークラスを受けました。パトリックリード、ブライソンデシャンボー、パットペレス、最近のPGAツアーの脱北者。

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

ミズ・マーベルの家族の帰郷は悪役よりも激しく打撃を与える

レッドダガーとマーベルさんがチームを組んでいます。

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

6億7500万ドルのビットコインローンのデフォルト後にすべての資産を清算するように命じられたスリーアローズキャピタル

暗号業界最大の沈没船の1つであるスリーアローズキャピタルは、ついにその悲惨さから解放されています。火曜日に、不良債権ヘッジファンドは、債権者からの返済を要求する訴訟の高まりに応えて、バージンアイランド裁判所によって清算を命じられました彼らが3ACに行ったローン。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

Suffragettes Indicam #3: Junho

Suffragettes Indicam #3: Junho

Mais um mês se findando — e metade do ano de 2022 já passou. Sabe o que isso significa? Não, não é hora de verificar se você está cumprindo com suas resoluções de Ano Novo.

Calin (Estudo de Caso UX/UI Design)

Calin (Estudo de Caso UX/UI Design)

Este projeto foi desenvolvido a partir de briefing fictício disponibilizado pelo site Tifólio, uma plataforma para designers. Briefing Matriz CSD Como ponto inicial utilizei como base algumas notícias atuais sobre meios de pagamento digital e com essas informações desenvolvi a Matriz CSD.

多元宇宙—Junø

多元宇宙—Junø

チェーン間アカウントがJunoに登場します。異なるブロックチェーン間でスマートコントラクトの構成可能性と真の相互運用性を提供します。

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

#brand【ベター・コール・ソール!アメリカのテレビシリーズ「ブレイキング・バッド」に最高のビジネス例が隠されている】・・・ルールクリエイティブ

1.ドラマを見た後、起業する考えはありますか?あなたのビジネスはボトルネックに遭遇しましたか?方向性がなくてわからない場合は、ドラマを追いかけて行くことを心からお勧めします。(?)ブラフではなく、最も完璧なビジネス例を隠すドラマがあります。2.ブレイキング・バッドとその弁護士ドラマ「ブレイキング・バッド」を見た友人たちは、演劇の中で、穏やかな表情で、弁護士のソウル・グッドマンに深く感銘を受けなければなりません。口を開けて、感覚の弱い傭兵の性格を持っています。道徳の面で、サル・グッドマンは無意識のうちに劇に欠かせない役割を果たし、彼自身のシリーズ「絶望的な弁護士」(ベター・コール・ソール)を生み出しました。ウェントウのテキストとビデオは、劇中のソウル・グッドマンのテレビコマーシャルです。製品(サービス)、競争戦略、市場ポジショニング、ブランド名、ターゲット顧客グループ、コミュニケーション軸から広告まで、サル・グッドマンの役割のビジネス設定は、「最低」と見なすことができる超超超超超超完全です。ブランドコミュニケーションのコスト」「変化」のモデル。なぜ?私の分析をご覧ください。3.ソウル・グッドマンの「事業戦略」1.基本情報ブランド名:Saul Goodman製品:法律相談サービス対象顧客:麻薬中毒、飲酒運転、事故など。法律知識の欠如は、一般的に公立弁護士にしか余裕がなく、真面目な弁護士も「特別な法律を持つ消費者」を避けます。恐れてはいけない「​​ニーズ」。コミュニケーションの主軸:この国のすべての男性、女性、子供は有罪判決を受けるまで無実だと思います。地域:アルバカーキ市スローガン:Thrallに電話したほうがいいです!(ベター・コール・ソール)広告:2つの可能性のある犯罪状況をシミュレートします+サウルの主張+サウルのスローガン2をより適切に呼び出します。

Language