Arquitetura de aplicações frontend enterprise
(medium.com)- Um codebase crescer = ficar mais difícil de entender e de modificar.
- A solução? Manter o codebase pequeno.
- Separação do codebase por domínio & micro frontends to rescue!
- Necessidades como definir relações de dependência entre bibliotecas dentro de um monorepo & verificar dependências foram resolvidas com a adoção do Nx
- Separar o código entre aplicações e bibliotecas
- As aplicações têm o papel de injetar dependências e configurações
- Implementar a maior parte das funcionalidades nas bibliotecas
- Nas bibliotecas, são escritos não só design system, internacionalização e módulos de terceiros que podem ser usados de forma genérica, mas também até códigos não reutilizáveis, como o hero banner da página inicial, a página de detalhes do produto e o histórico de pedidos.
Bibliotecas Feature
- Basicamente, todos os componentes usados em uma página são escritos na biblioteca Feature com o mesmo nome
- ex) todos os componentes da página
SignInPagedo domínioaccountsão escritos na bibliotecaaccount/feature-sign-in
- ex) todos os componentes da página
- Componentes compartilhados por duas ou mais páginas do mesmo domínio são separados em uma feature distinta dentro desse domínio
- ex) se o componente
KakaoLoginButtonfor usado em comum emSignInPageeSignUpPagedo domínioaccount, esse componente será escrito na bibliotecaaccount/feature-social-login
- ex) se o componente
- Componentes compartilhados por páginas de domínios diferentes são separados em uma feature distinta dentro do domínio compartilhado
- ex) o componente
GlobalNavigation, compartilhado entreHomePagedo domíniolandingeLecturePagedo domínioclassroom, é escrito na bibliotecashared/feature-navigation
- ex) o componente
Bibliotecas Shell
- As páginas são criadas combinando componentes das bibliotecas Feature e UI
- ex) o componente
SignInPageé um componente da biblioteca account/shell-kr-web. Nela também existemSignUpPage,PhoneVerificationPageetc.
- ex) o componente
- A biblioteca Shell é o ponto de entrada de um domínio específico fornecido à aplicação
- É possível fornecer pontos de entrada diferentes para cada aplicação
- Por exemplo..
- Os componentes usados no componente
HomePageestão escritos na bibliotecalanding/feature-home. - Mas, mesmo sendo a mesma
HomePage, sua composição será diferente dependendo de ser aHomePagedo site dos EUA, do Japão ou da Coreia. - Portanto, é possível criar bibliotecas
shellpara cada aplicação que acessa o domíniolanding. (shell-us-web,shell-jp-web,shell-kr-web)
Bibliotecas Provider
- Bibliotecas que gerenciam estado compartilhado entre duas ou mais bibliotecas Feature
- ex)
shared/provider-auth-state, que gerencia o estado de login
- ex)
Bibliotecas UI
- Um conjunto de componentes presentacionais compartilhados entre duas ou mais bibliotecas.
Bibliotecas Utility
- Todos os módulos que não se encaixam nas quatro categorias acima
- Devem fornecer funcionalidades independentes o suficiente para serem testadas e implantadas sem relação com o modelo de domínio da CLASS101.
- ex)
shared/utils-apollo-client,shared/utils-i18n
- ex)
Aplicações
- Passam a ter apenas o papel de gerenciar configurações e dependências = quase não há código na aplicação
Ainda não há comentários.