{front-end}
Arquitetura Front-end
- Monolito (React SPA)
- Redux (maior custo de desenvolvimento)
- Alto acoplamento de código
- Muitas dependências
- Código legado
- Escalabilidade só por override (Craco JS)
- Baixa cobertura de testes
SEOPerformanceDesign systemMobile first
Como estamos?

- React / Vue / Svelte e etc
- Nova arquitetura
- Context API / Mobx
- Regra de dependência
- Turborepo (monorepo)
- Turbopack (multi-repo)
- Remix (react approved)
- Next.js (react approved)
- Escalabilidade
- Performance
- Mobile first
Futuro

# ARCHICTURE
Proposta da
Arquitetura Front-end
Arquitetura client-side escalável, distribuída em camadas, com o objetivo de promover uma arquitetura front-end que favoreça a reusabilidade de código, coesão, independência de tecnologia e testabilidade.
// Pensando na escalabilidade do projeto, sem trazer complicações
// e Over engineering, pensei em trazer um modelo de arquitetura para
// o frontend do boilerplate. Indo direto ao ponto, esse é o modelo:
app-ma
├── components # Componentes globais de uso geral do projeto.
├── layout # Wrappers padrões para componentes ou páginas.
├── hooks # Hooks globais de uso geral do projeto.
├── contexts # Contexts para gerenciamento de estado global do projeto.
├── modules # Módulos. Um para cada página, com a lógica de negócio.
│ └─ example-module
│ ├── index.js/ts # Ponto de partida desse módulo.
│ ├── hooks # Hooks globais de uso exclusivo desse módulo.
│ ├── components # Componentes de uso exclusivo desse módulo.
│ ├── service # Funções e lógicas de utilização geral e genérica
│ └── utils # Componentes de uso exclusivo desse módulo.
├── pages # Cada página associada com uma rota e um módulo.
├── services # Lógica de comunicação com o backend.
├── shared # Tudo que for compartilhável. Sendo configuração de temas, etc.
└── utils # Funções e lógicas de utilização geral e genérica.# PRESENTING ARCH
Arquitetura Front-end - Organização
Obs: Essa estrutura interna aos Módulos é opcional e pode ser criada mediante necessidade, precisando inicialmente só do index.js/ts
# ARCH DEPEDENCY RULE
Arquitetura - Regra de Dependência

Modelo de regra de arquitetura limpa para o frontend que respeita a "depency rule", regra muito utilizada na maioria das arquiteturas existentes de software.

# MONOREPO
Monorepo
Legado & Novo
Uma proposta de solução em um monorepo que visa a coexistência do legado com o novo. Essa abordagem sugere a modularização do aplicativo e a evolução da base de código, sem a perda das páginas, componentes e funcionalidades já existentes.
- Ferramenta de build
- Modularização de apps
- Desenvolvimento paralelo
-
Coexistência legado x novo
-
Compartilhamento dos comp. entre as apps
- Reutilização de código de pacotes compartilhados
- Cache local dos pacotes
- Configurações de código (ESlint, TSconfig, etc)
- Já suporta micro front-end
- Cases (Boticário e Globo)
- Velocidade de compilação (Rust)
- Watch mais inteligente
- Segurança nas dependências (publicas e privadas)
Turborepo - Vantagens

- Requer download do codebase completo
- Nem todos pacotes (npm) existentes vão funcionar com o Turborepo
- Complexidade de configuração para devs com menor senioridade
- O codebase pode ficar muito grande com o tempo
- Dependências antigas podem não serem aceitas por questões de segurança e vulnerabilidade
- O esforço de implementação com o legado pode ser alto
Turborepo - Desvantagens

TURBOREPO
# TURBOREPO EXAMPLE


# MONOREPO
Multi-repo
Novo
Uma proposta de solução multi-repo pensando somente em uma nova app e uma nova proposta de arquitetura. Essa abordagem sugere a modularização do aplicativo, escalabilidade, sem o aproveitamento do que já foi desenvolvido, porém com todos os benefícios da proposta anterior.
- Ferramenta de build muiito rápida
- Typescript
- Suporta SSR
- Suporta micro frontends
- Suporta Next.js
- Gerenciamento de dependências automatizado
- Monitoria de vulnerabilidades
- Configurações que promovem a padronização do código e da app
- Redução de erros
- Aumenta a produtividade
- Facilita escalabilidade
- Controle de versões
Turbopack - Vantagens

- Complexidade de instalação
- Curva de aprendizado alta
- Não suporta todas as dependências (npm)
- Algumas soluções do framework são pagas (licença ou assinatura)
- Necessita de um dev de maior senioridade na equipe
Turbopack - Desvantagens

# FRAMEWORKS
Next.JS ou Remix
-
Next.js é conhecido por sua renderização no lado do servidor (SSR) integrada e é uma escolha sólida para projetos que precisam de SSR de forma direta e eficiente.
-
Remix oferece suporte à renderização no servidor, semelhante às abordagens tradicionais, e enfatiza a flexibilidade e a personalização, sendo uma escolha para desenvolvedores que desejam maior controle sobre suas aplicações.
Arquitetura Front-end
By Tiago Vilas Boas
Arquitetura Front-end
- 115