Es gibt eine Menge in Antwort auf diese Frage zu sagen, das sind die ersten Gedanken, die mir in den Sinn sprang:
In erster Linie im Auge behalten, dass private
nur eine ist Kompilierzeit Konstrukt - es kann nicht zur Laufzeit durchgesetzt werden (siehe here und here für relevante Diskussion). Als solches sollten Sie sich bitte davon distanzieren, dass die Begriffe private
in irgendeiner Weise für Sicherheitszwecke nützlich sind. Darum geht es einfach nicht.
Es ist über Kapselung, und wenn Sie ein Feld oder eine Methode auf Ihrer Komponente, die Sie darin einkapseln wollen, machen Sie es klar, dass es von nirgendwo anders zugegriffen werden sollte, dann sollten Sie es unbedingt machen private
: Das ist private
ist für: Es signalisiert Ihre Absicht, dass, was auch immer Sie es angezogen haben, nicht von außerhalb der Klasse berührt werden sollte.
Das gleiche gilt für public
: Es ist auch ein Compile-Time-only-Konstrukt, so dass die Klassenmitglieder standardmäßig public
sind, während wahr, hat genau null Bedeutung zur Laufzeit. Aber wenn Sie ein Mitglied haben, das Sie explizit der Außenwelt als Teil der API Ihrer Klasse zugänglich machen wollen, sollten Sie es unbedingt public
setzen, um diese Absicht zu signalisieren: Das ist, was public
ist.
Dies gilt alles für Typescript im Allgemeinen. Speziell in Angular gibt es definitiv gültige Anwendungsfälle für öffentliche Mitglieder in Komponentenklassen: Wenn zum Beispiel das Muster container/component (aka smart/dumb) implementiert wird und "dumme" Kinder "intelligente" Eltern über die Konstruktorinjektion injizieren, ist dies extrem wichtig kommunizieren Sie Ihre Absicht darüber, welche Mitglieder des Elternteils nicht von den Kindern berührt werden sollten und sollten: Seien Sie nicht überrascht, wenn Sie diese dummen Kinder in Ihrem Likörschrank ertappen.
meine Antwort auf Ihre Frage also:
für alle von ihnen wie unter
sollte ich immer privat hinzufügen?
ist ein emphatisches no. Sie sollten nicht immerprivate
hinzufügen, weil Sie dabei den Zweck des Schlüsselwortes besiegen, weil es keine Absicht mehr signalisiert, wenn Sie es überall hinstellen: Sie könnten es genauso gut nirgendwo hinstellen.
Dank für die ausführliche Erläuterung! –
Danke für die Erklärung. Aber vielleicht verstehe ich es falsch: Ich verstehe, dass Eigenschaften und Methoden meistens privat sein müssen (= "nur für diese Komponente verwenden"). Daher sollte die Antwort "JA" lauten, solange der Typ die Eigenschaft/Methode nicht nach außen hin offenlegen muss. " Nein ? Warum schließen Sie Ihre Erklärung, indem Sie "nein" (was wie ein "nie" klingt) beantworten? –
ich rote eckige 2 Tutorials, und ich habe nicht herausgefunden, wenn ich öffentlich verwenden sollte. Es gibt viele Varianten für die Komponentenkommunikation: https://angular.io/docs/ts/latest/cookbook/component-communication.html# Wahrscheinlich sollten wir public nur für Eigenschaften und Methoden verwenden, die über Input Output definiert wurden. Aber ich bin mir nicht sicher. –