Приватные и публичные методы

Slim.js — это легковесная библиотека для создания веб-компонентов на JavaScript, ориентированная на декларативное описание UI и реактивное обновление данных. Одной из ключевых особенностей является возможность управления доступом к методам компонентов через приватные и публичные методы.

Публичные методы

Публичные методы доступны извне компонента, то есть они могут быть вызваны из других компонентов или через DOM-элементы, на которых инстанцирован компонент. Объявляются они как обычные функции внутри класса компонента, без специальных модификаторов.

Пример объявления публичного метода:

class MyComponent extends Slim {
    constructor() {
        super();
        this.name = "Slim.js";
    }

    greet() {
        console.log(`Hello from ${this.name}`);
    }
}

Slim.define('my-component', MyComponent);

// Вызов извне:
const elem = document.querySelector('my-component');
elem.greet(); // Hello from Slim.js

Особенности публичных методов:

  • Доступны через ссылку на DOM-элемент компонента.
  • Могут быть вызваны любым кодом, который имеет доступ к элементу.
  • Используются для взаимодействия с внешним миром и обмена данными между компонентами.

Приватные методы

Приватные методы предназначены для внутренней логики компонента. Они недоступны извне и помогают инкапсулировать поведение, предотвращая случайное вмешательство из других частей приложения.

В Slim.js приватные методы объявляются с использованием синтаксиса #, что соответствует современным стандартам ECMAScript для приватных полей и методов.

Пример приватного метода:

class MyComponent extends Slim {
    constructor() {
        super();
        this.counter = 0;
    }

    increment() {
        this.#increaseCounter();
    }

    #increaseCounter() {
        this.counter++;
        console.log(`Counter: ${this.counter}`);
    }
}

Slim.define('my-component', MyComponent);

const elem = document.querySelector('my-component');
elem.increment(); // Counter: 1
// elem.#increaseCounter(); // Ошибка: приватный метод недоступен

Ключевые моменты приватных методов:

  • Начинаются с #.
  • Доступны только внутри класса, где объявлены.
  • Не видны извне компонента и не могут быть переопределены или вызваны напрямую.
  • Упрощают поддержку и читаемость кода, скрывая внутренние детали реализации.

Взаимодействие приватных и публичных методов

Часто публичные методы вызывают приватные для выполнения внутренней логики. Это позволяет создать интерфейс компонента для внешнего мира, оставляя внутренние процессы скрытыми.

Пример комплексного использования:

class TimerComponent extends Slim {
    constructor() {
        super();
        this.seconds = 0;
        this.intervalId = null;
    }

    start() {
        if (!this.intervalId) {
            this.#runTimer();
        }
    }

    stop() {
        clearInterval(this.intervalId);
        this.intervalId = null;
    }

    #runTimer() {
        this.intervalId = setInterval(() => {
            this.seconds++;
            console.log(`Time: ${this.seconds}s`);
        }, 1000);
    }
}

Slim.define('timer-component', TimerComponent);

const timer = document.querySelector('timer-component');
timer.start(); // запускает таймер
timer.stop();  // останавливает таймер

Здесь #runTimer является приватным методом, обеспечивающим работу таймера, а публичные методы start и stop управляют его запуском и остановкой.

Динамическое связывание методов

Slim.js поддерживает реактивные данные, и публичные методы могут взаимодействовать с реактивными свойствами. Приватные методы часто используются для обновления этих свойств без внешнего вмешательства.

class CounterComponent extends Slim {
    constructor() {
        super();
        this.count = 0;
    }

    increment() {
        this.#updateCount();
    }

    #updateCount() {
        this.count++;
        this.update(); // обновление шаблона Slim
    }
}

Slim.define('counter-component', CounterComponent);

Вызов публичного метода increment безопасно увеличивает счетчик через приватный метод #updateCount, скрывая детали реализации обновления состояния.

Рекомендации по использованию

  • Приватные методы следует применять для логики, которая не должна быть доступна извне компонента.
  • Публичные методы — для функциональности, которую нужно использовать другими компонентами или скриптами.
  • Следует избегать чрезмерного открытия методов без необходимости, чтобы не нарушать инкапсуляцию.
  • Использование приватных методов повышает надежность и предсказуемость поведения компонентов в сложных приложениях.

Приватные и публичные методы в Slim.js формируют основу правильной архитектуры компонента, позволяя отделять внутреннюю реализацию от внешнего интерфейса, улучшая поддержку и масштабируемость кода.