Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate Why Blitz page #9

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
248 changes: 130 additions & 118 deletions app/pages/docs/why-blitz.mdx
Original file line number Diff line number Diff line change
@@ -1,139 +1,151 @@
---
title: Why use Blitz instead of Next.js?
sidebar_label: Why Blitz instead of Next.js?
title: Por que usar Blitz ao invés de Next.js?
sidebar_label: Por que Blitz ao invés de Next.js?
---

### 1. Fullstack instead of Frontend {#1-fullstack-instead-of-frontend}

Next.js is mostly a frontend framework. It's designed for building a
frontend that connects to some other API. Next.js isn't set up by default
for building a true fullstack application.

Blitz adds all the missing features and functionality that turns Next into
a true fullstack framework. These key features include direct database
access, middleware, and authentication.

### 2. Data Layer {#2-data-layer}

The new Blitz data layer is a novel technology for eliminating the API
while retaining client-side rendering. In a Blitz app, you can import your
server code directly into the frontend so you don't need to build an API
and do data fetching from the frontend. At build time, Blitz automatically
inserts an API call that runs the server code on the server. Essentially,
Blitz abstracts your API into a compile step.

This is a game changer for React app development because it eliminates an
entire portion of traditional React app architecture. This means it's
easier to learn, faster to develop, and more fun to build things!

That said, you can continue doing data fetching via REST or GraphQL like
you've always done. Blitz doesn't restrict this in any way.

### 3. Built-in Authentication {#3-built-in-authentication}

Blitz has built-in session management that works with any identity
provider, including self-hosted email/password and third party services.
Authentication is something that's complicated and difficult to implement
correctly. Having it built into Blitz saves you a ton of time and
potential security vulnerabilities.

Building an awesome UX with auth in Next.js is very tricky and tedious,
but Blitz gives you best-in-class DX for free.

### 4. Conventions {#4-conventions}

Next.js does not have any conventions aside from file-system based
routing. This leaves every developer to re-invent the wheel for every
project.

Blitz brings a number of conventions for things like how to organize your
files and how to structure your routes. This means you don't waste any
time figuring this out for every project. It also greatly benefits the
community. Common project structure and architectural patterns allow you
to move from Blitz app to Blitz app and immediately feel at home.

### 5. Code Scaffolding {#5-code-scaffolding}

There are two main ways to reduce the amount of code you have to write by
hand:

1. Code generation
2. Code scaffolding

**Code generation** means a library generates code for you. Examples are
graphql-code-generator which generates code from GraphQL queries and
Hasura which generates an entire GraphQL API from your database schema.
Usually codegen has no way to fully customize the generated code. You're
at the mercy of the library for what it supports. Often you will run into
edge cases that codegen has no solution for. And you can't fix it because
you don't own the code.

**Code scaffolding** means initial code is scaffolded into your project
for you. From then on, you have full ownership over all the code and can
customize it as much you need. A downside of code scaffolding is that you
don't get automatic updates like you do with code generation from a
third-party library. But the huge upside is that you are guaranteed to
never be limited by someone else's design choices which you have no way to
change.

Blitz is a huge fan of code scaffolding. We have a whole slew of
[`blitz generate`](./cli-generate) commands for scaffolding code into your
project. It's still early days for our code scaffolding — we have a lot of
powerful features that still need to be added, including the ability to
add your own custom scaffold templates.

### 6. Recipes {#6-recipes}

Recipes are one-line commands for scaffolding code into your project from
an MDX recipe on npm or a git repository.

Examples:

- `blitz install tailwind` - one command to install and configure tailwind
- `blitz install chakra-ui` - one command to install and configure chakra
- `blitz install material-ui` - one command to install and configure
### 1. Fullstack ao invés de Frontend {#1-fullstack-instead-of-frontend}

Next.js é principalmente um framework frontend. Ele é feito para a
construir frontends que se conectam a alguma API. Next.js não é
configurado por padrão para construir uma verdadeira aplicação fullstack.

Blitz adiciona todas as funcionalidades que faltam e tornam o Next um
verdadeiro framework fullstack. Essas funcionalidades incluem acesso
direto a banco de dados, middleware, e autenticação.

### 2. Camada de Dados {#2-data-layer}

A nova camada de dados do Blitz é uma tecnologia origina para eleminar a
API e ainda manter renderização do lado do cliente. Em um app Blitz, você
pode importar o código do servidor direto no frontend para que você não
tenha que construir uma API e fazer a requisição de dados pelo frontend.
Em tempo de compilação, o Blitz automaticamente insere uma chamada a API
que roda o código de servidor no servidor. Essencialmente, o Blitz abstrai
sua API em um passo de compilação.

Essa é uma virada de jogo para o desenvolvimento de apps React porque ela
elimina uma porção inteira da arquitetura tradicional de apps React. Isso
significa que é mais fácil de aprender, mais rápido de desenvolver, e mais
divertido de construir coisas!

Dito isso, você ainda pode continuar fazendo requisição de dados via REST
ou GraphQL como sempre tem feito. Blitz não restringe isso de forma
alguma.

### 3. Autenticação Embutida {#3-built-in-authentication}

Blitz tem gerenciamento de sessão embutido que funciona com qualquer
provedor de identidade, incluindo email/senha e serviços terceiros.
Autenticação é algo complicado e difícil de implementar corretamente. Ter
ela embutida no Blitz te economiza um monte de tempo e potenciais
vulnerabilidades de segurança.

Construir uma experiência de usuário incrível com autenticação no Next.js
é bastante complicado e tedioso, mas o Blitz te dá a melhor que há
experiência de desenvolvimento de graça.

### 4. Convenções {#4-conventions}

Next.js não possui qualquer convenção além do roteamento baseado no
sistema de arquivos. Isso faz com que cada desenvolvedor tenha que
reinventar a roda em cada projeto.

Blitz traz um número de convenções para coisas como como organizar seus
arquivos e como estruturar suas rotas. Isso significa que você não perde
tempo descobrindo isso para cada projeto. Isso também beneficia
imensamente a comunidade. Estrutura de projeto e padrões arquiteturais em
comum fazem com que você mude de app Blitz pra app Blitz e imediatamente
se sinta em casa.

### 5. Scaffolding de Código {#5-code-scaffolding}

Existem duas maneiras principais de se reduzir a quantidade de código que
você tem que escrever na mão:

1. Geração de código
2. Scaffolding de código

**Geração de código** significa que uma biblioteca gera código pra você.
Exemplos são o graphql-code-generator que gera código a partir de queries
GraphQL e Hasura que gera uma API GraphQL inteira a partir do schema do
seu banco de dados. Geralmente, geração de código não possui uma forma de
customizar completamente o código gerado. Você fica nas mãos da biblioteca
e do que ela suporta. Frequentemente você esbarra em casos de contorno que
a geração de código não tem solução. E você não pode consertar porque você
não é dono do código.

**Scaffolding de código** significa que o código é inicialmente "gerado"
no seu projeto pra você. A partir de então, você tem total propriedade
sobre todo o código e pode customizá-lo o quanto precisar. Uma desvantagem
do scaffolding de código é que você não recebe atualizações automáticas do
código como você recebe com geração de código de uma biblioteca de
terceiros. Mas a grande vantagem é que você tem a garantia de nunca ficar
limitado pelo design de outra pessoa e que você não tem como mudar.

Blitz é um grande fã de scaffolding de código. Nós temos uma enorme
quantidade de comandos [`blitz generate`](./cli-generate) para fazer o
scaffolding de código no seu projeto. Ainda estamos no início do nosso
scaffolding de código — nós temos várias funcionalidades poderosas que
ainda precisam ser adicionadas, incluindo a habilidade de adicionar seu
próprio template de scaffold personalizado.

### 6. Receitas {#6-recipes}

Receitas são comandos de uma linha para fazer scaffolding de código no seu
projeto a partir de um receita MDX no npm ou num repositório git.

Exemplos:

- `blitz install tailwind` - um comando para instalar e configurar o
tailwind
- `blitz install chakra-ui` - um comando para instalar e configurar o
chakra-ui
- `blitz install material-ui` - um comando para instalar e configurar o
material-ui

Recipes are super powerful. They can change almost anything in your
project, including adding dependencies, changing code, adding code, etc.
They are written via MDX and can be composed like React components.
Receitas são super poderosas. Elas podem alterar quase tudo no seu
projeto, incluindo adicionar dependencias, alterar código, adicionar
código, etc. Elas são escritas com MDX e podem ser compostas assim como
componentes React.

### 7. New App Development {#7-new-app-development}
### 7. Desenvolvimento de Novos Apps {#7-new-app-development}

A new Next.js app is totally bare-bones. So every time you start a Next.js
project, you have to spend hours setting up all the basics like eslint,
prettier, husky git hooks, etc.
Um app Next.js novo é totalmente "bare-bones". Então toda vez que você
inicia um projeto Next.js, você tem que gastar horas configurando todo o
básico como eslint, prettier, hooks do git do husky, etc.

A new Blitz app saves you a ton of time because all that is pre-configured
for you! For sure you can always customize it later, but having a working
starting point is awesome.
Um ap Blitz novo te salva bastante tempo porque tudo isso vem
pré-configurado para você! Com certeza você sempre pode customizar depois,
mas ter um ponto de partida que funciona é demais!

### 8. Relaxed Restrictions {#8-relaxed-restrictions}
### 8. Restrições Relaxadas {#8-relaxed-restrictions}

Next.js requires all your React pages go in a single `pages/` folder.
Blitz relaxes this restriction by allowing you to have an infinite number
of `pages/` folders.
Next.js requer que todas a suas páginas React fiquem em uma única pasta
`pages/`. Blitz relaxa essa restrição permitindo que você tenha um número
infinito de pastas `pages/`.

For large projects this is a huge benefit because you can separate and
organize your pages in any way you want.
Para projetos grandes esse é um benefício enorme porque você pode separar
e organizar suas páginas de qualquer maneira que quiser.

Examples:
Exemplos:

- `app/pages/` could contain the homepage and pages like "about"
- `app/products/pages/` could contain all the pages related to products
- `app/admin/pages/` could contain all pages related to the backend admin
section
- `app/pages/` poderia conter a página inicial e páginas como "sobre"
- `app/products/pages/` poderia conter todas as páginas relacionadas a
produtos
- `app/admin/pages/` poderia conter todas as páginas relacionas à seção de
admin

### 9. Route Manifest {#9-route-manifest}
### 9. Manifesto de rotas {#9-route-manifest}

Next.js requires you to manually type out page locations. Blitz comes with
a [Route Manifest](./route-manifest), so you can do:
Next.js requer que você escreva manualmente a localização de suas páginas.
Blitz vem com um [Manifesto de Rotas](./route-manifest), para que você
possa fazer:

```tsx
<Link href={Routes.ProductsPage({ productId: 123 })} />
// instead of
// ao invés de
<Link href={`/products/${123}`} />
```

This improves expressiveness and simplifies moving pages to other
location.
Isso melhora a expressividade e simplifica a mudança de páginas para
diferentes localizações.