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.