foundation

Encapsulation

Скрывайте representation details за methods или accessors, чтобы callers зависели от stable behavior, а не от mutable internals.

Инкапсуляция скрывает детали представления за стабильным API: вызывающий зависит от поведения, не от изменяемых внутренностей. Private поля, getters с валидацией и узкие public методы защищают инварианты — `Account` не уйдёт в минус, если списания только через `debit(amount)`.

В TypeScript `private` только на этапе компиляции, если не использовать runtime privacy `#field`.

На интервью: рефакторинг public полей в методы с инвариантами и связь с законом Деметры.

Типовые ошибки: getters/setters на всё; анемичные data bag с логикой снаружи; «private» только по соглашению в JS.

Компромисс — безопасность и эволюция API против удобства прямого доступа к полям.

Чеклист:

  • Скрывайте mutable state; отдавайте операции.
  • Инварианты на границах.
  • Compile-time vs runtime privacy в TS.