NextJS Server Actions e monorepositórios

NextJS Server Actions e monorepositórios

Com a última versão no NextJS e a possibilidade de criar funções do lado do servidor, a comunidade de desenvolvedores ficou bastante animada com a possibilidade de manter todo o projeto dentro de um mesmo código —inclusive, uma conexão com o banco de dados. Mas calma lá, isso não é nem tão inovador assim. E será que é bom mesmo?

O que é um monorepositório?

Hoje em dia estamos acostumados a desenvolver uma API, e desenvolver uma interface em projetos e repositórios separados —backend e frontend. Mas, a depender do projeto, ou da tecnologia, existe a possibilidade de desenvolver tudo em um único projeto, sem essa divisão de backend e frontend. Isso é tal do “monorepositório”.

Com apenas um repositório você terá uma facilidade maior de manuntenção e o código fica mais visível e acessível durante o desenvolvimento. É interessante para quem está começando com programação e fica bem legal quando é um pequeno projeto, ou algum estudo ou experimentação de tecnologia que você está fazendo.

Usar monorepositório é uma boa prática?

Sendo bastante sincero, existe um motivo para monorepositórios não serem mais tão populares.

Dividir seu projeto, em diferentes repositórios e códigos, não só pode adicionar uma boa camada de segurança, como também melhora a divisão de responsabilidades em uma aplicação, e isso sim é uma boa prática de programação.

Ter tudo em um único lugar torna seu projeto um “monstro”. Por mais que até certo nível seja até amigável quanto mais o seu projeto cresce, essa junção de responsabilidades torna o seu código extremamente complexo, e até dificulta a manutenção —que deveria ser um dos pontos positivos de um projeto com monorepositório.

Hoje em dia, quando discutimos bastante monolitos e microserviços, digo que utilizar um monorepositório é até contra intuitivo.

Como está voltando aos holofotes?

A algum tempo atrás eram assim que sites e aplicações funcionavam, backend e frontend todos em um mesmo código. Projetos em monorepositórios chegaram ser bastante populares, principalmente no “boom” do PHP.

Hoje, o monorepositório volta a discussão pois tecnologias mais recentes, como o React e o framework NextJS, estão trazendo um novo recurso de “Server Actions” que permite trazer funções hoje já bastante comuns ao backend, como uma conexão ao banco de dados, para o mesmo repositório que estão seus componentes em React.

Olha só um componente React chamando uma função que insere um dado em um banco de dados:

import db from './db';
import { redirect } from 'next/navigation';

async function create(formData: FormData) {
  'use server';
  const post = await db.post.insert({
    title: formData.get('title'),
    content: formData.get('content'),
  });
  redirect(`/blog/${post.slug}`);
}

export default function Page() {
  return (
    <form action={create}>
      <input type="text" name="title" />
      <textarea name="content" />
      <button type="submit">Submit</button>
    </form>
  );
}

Todo recurso é útil

Por mais que eu pessoalmente ainda ache estranho, todo recurso é realmente útil. Os benefícios ainda existem, basta sabermos usá-los. Além disso, ainda é um recurso bastante novo em fase Alpha no NextJS, o que mais ainda pode estar por vir até a versão final?

E você? O que acha de Server Actions e de monorepositorios? Participe de nosso canal no Discord e conte pra gente!