← Назад ко всем вопросам

Как определить Micro Frontend

1️⃣ Как кратко ответить

Micro Frontend — это архитектурный подход, который разбивает фронтенд-приложение на независимые модули, каждый из которых может разрабатываться, тестироваться и деплоиться отдельно. Это позволяет командам работать параллельно, улучшает масштабируемость и упрощает управление сложными проектами.

2️⃣ Подробное объяснение темы

Micro Frontend — это концепция, которая применяет принципы микросервисной архитектуры к фронтенд-разработке. В традиционных монолитных приложениях весь фронтенд код хранится в одном репозитории и разрабатывается как единое целое. Это может привести к проблемам с масштабируемостью и сложностью управления, особенно в больших командах и проектах.

Зачем это нужно

  1. Масштабируемость: Позволяет распределять работу между несколькими командами, каждая из которых может работать над своим модулем независимо.
  2. Гибкость: Разные модули могут использовать разные технологии и инструменты, что позволяет выбирать наиболее подходящие решения для каждой задачи.
  3. Упрощение развертывания: Каждый модуль может быть развернут независимо, что упрощает процесс обновления и тестирования.
  4. Улучшение времени загрузки: Модули могут загружаться асинхронно, что может улучшить время загрузки приложения.

Как это работает

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

Пример

Рассмотрим пример интернет-магазина, который использует Micro Frontend:

  • Каталог товаров: Один модуль отвечает за отображение каталога товаров. Он может быть разработан на React.
  • Корзина: Другой модуль управляет корзиной покупок и может быть написан на Vue.js.
  • Профиль пользователя: Третий модуль отвечает за управление профилем пользователя и может использовать Angular.

Каждый из этих модулей может быть развернут независимо и взаимодействовать с другими через API или события.

Пример кода

// Модуль каталога товаров
class ProductCatalog {
  constructor() {
    this.products = [];
  }
​
  fetchProducts() {
    // Получение списка товаров с сервера
    fetch('/api/products')
      .then(response => response.json())
      .then(data => {
        this.products = data;
        this.render();
      });
  }
​
  render() {
    // Отображение списка товаров на странице
    const productList = document.getElementById('product-list');
    productList.innerHTML = this.products.map(product => `
      <div class="product">
        <h2>${product.name}</h2>
        <p>${product.description}</p>
        <button onclick="addToCart(${product.id})">Add to Cart</button>
      </div>
    `).join('');
  }
}
​
// Модуль корзины
class ShoppingCart {
  constructor() {
    this.cartItems = [];
  }
​
  addToCart(productId) {
    // Добавление товара в корзину
    this.cartItems.push(productId);
    this.updateCartDisplay();
  }
​
  updateCartDisplay() {
    // Обновление отображения корзины
    const cartDisplay = document.getElementById('cart-display');
    cartDisplay.innerHTML = `Items in Cart: ${this.cartItems.length}`;
  }
}
​
// Инициализация модулей
const productCatalog = new ProductCatalog();
productCatalog.fetchProducts();
​
const shoppingCart = new ShoppingCart();
window.addToCart = (productId) => shoppingCart.addToCart(productId);
  • ProductCatalog: Класс, отвечающий за управление каталогом товаров. Он загружает данные о товарах с сервера и отображает их на странице.
  • fetchProducts: Метод, который делает HTTP-запрос для получения списка товаров и вызывает метод render для их отображения.
  • render: Метод, который обновляет DOM, чтобы показать список товаров.
  • ShoppingCart: Класс, управляющий корзиной покупок. Он добавляет товары в корзину и обновляет отображение количества товаров.
  • addToCart: Метод, который добавляет товар в корзину и обновляет отображение корзины.
  • updateCartDisplay: Метод, который обновляет DOM, чтобы показать количество товаров в корзине.

Этот пример демонстрирует, как можно разделить функциональность на независимые модули, которые могут взаимодействовать друг с другом, сохраняя при этом независимость в разработке и развертывании.

Тема: Архитектура, FSD и микрофронтенды
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки