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!