When to use Observable vs EventEmitter vs Dot Rule for change detection in angular2
<p>There are three methods I have seen to manage change detection in Angular2.</p>

<ol>
<li><p>Observables</p>

<pre><code>@Injectable()
export class TodosService {
    todos$: Observable&lt;Array&lt;Todo&gt;&gt;;
    private _todosObserver: any;
    private _dataStore: {
        todos: Array&lt;Todo&gt;
    };

    constructor(private _http: Http) {
        // Create Observable Stream to output our data
        this.todos$ = new Observable(observer =&gt; 
            this._todosObserver = observer).share();

        this._dataStore = { todos: [] };
    }
}
</code></pre></li>
<li><p>EventEmitter.</p>

<pre><code>@Injectable()
class NameService {
  name: any;
  nameChange: EventEmitter = new EventEmitter();
  constructor() {
    this.name = "Jack";
  }
  change(){
    this.name = "Jane";
    this.nameChange.emit(this.name);
  }
}
</code></pre></li>
<li><p>Dot Rule</p>

<pre><code>export interface Info {
   name:string;
}

@Injectable()
class NameService {
  info: Info = { name : "Jack" };
  change(){
    this.info.name = "Jane";
  }
}
</code></pre></li>
</ol>

<p>My question is, all three implementations can work when subscribing to watch changes in data. How do you decide when to use one instead of the other, and what are the drawbacks of each.</p>