typescript - Veřejné nebo soukromé - Zmatek ohledně metod třídy komponenty Angular 2
Mám problém pochopit, které metody by měly být soukromé a které veřejné ve třídě komponenty.
Zdá se být poměrně snadné v rámci služby posoudit, zda je metoda veřejná nebo soukromá, např.:
export class MyServiceClass {
private _cache = {}; // this value is private and shouln't be accessed from outside
public accessCache(){ // it's public as it's an API method
return this._cache;
}
public setCache(newVal){
this._cache = newVal;
}
}
Podle této logiky by všechny metody v komponentě měly být soukromé, protože žádná z metod by neměla být zpřístupněna mimo třídu. (podle tohoto příspěvku jsou komponenta a její pohled jednou entitou)
export class MyComponent {
private _getRandomNumbers(){ // this is used in view only
/*..*/
}
}
Neexistuje žádná tragédie, ale v tomto videu se můžete dozvědět, že by měly být jednotkově testovány pouze veřejné metody komponenty. Pokud budu postupovat podle výše uvedeného, nemohu najít žádný důvod mít veřejné metody ve třídě komponenty, ale stále mám některé metody, které stojí za otestování (zejména metody používané ve view). To znamená, že jsem naprosto zmatený ohledně významu privátních a veřejných metod ve světě Angularu.
Tak moje otázka je jednoduchá:
Které metody v komponentách by měly být označeny jako veřejné a soukromé.
Odpověď č. 1
V třídě komponenty bych řekl, nastavte vše jako public (pokud není žádný přístupový modifikátor, je ve výchozím nastavení public).
V běžném případě neprodloužíme třídu komponenty, proto není přístupový modifikátor potřeba, podle mého názoru.
Existují případy, kdy budeme dědit komponentu. Podívejte se zde na dědičnost komponent v Angular 2. Nicméně i v těchto případech nemusí být přístupový modulátor nutný.
...
export class MyComponent {
// injected service as private
constructor(private _randomSvc: RandomService) {}
getRandomNumbers(){ } // leave it as public
@Input()
myInput: string; // leave it as public
@Output()
myOutput; // leave it as public
}
Pamatujte, že samotný JavaScript nemá žádný přístupový modifikátor. Přístupový modifikátor je použitelný pouze během vývoje (IDE). Přestože je modifikátor v některých případech užitečný, doporučil bych minimalizovat jeho používání.
