# Estrutura da Aplicação
O Vuex não restringe realmente como você estrutura seu código. Em vez disso, ele impõe um conjunto de princípios de alto nível:
- O estado do nível da aplicação é centralizado no store. 
- A única maneira de mudar o estado é confirmando (ou fazendo commit das) mutações, que são transações síncronas 
- A lógica assíncrona deve ser encapsulada e pode ser composta com ações. 
Enquanto você seguir estas regras, depende de você como estruturar seu projeto. Se o arquivo do seu store for muito grande, basta começar a dividir as ações, mutações e getters em arquivos separados.
Para qualquer aplicação mais complexa, provavelmente precisaremos aproveitar os módulos. Aqui está um exemplo de estrutura de projeto:
├── index.html
├── main.js
├── api
│   └── ... # abstrações para fazer requisições a API
├── components
│   ├── App.vue
│   └── ...
└── store
    ├── index.js          # onde montamos módulos e exportamos a store
    ├── actions.js        # ações raiz
    ├── mutations.js      # mutações raiz
    └── modules
        ├── cart.js       # módulo cart
        └── products.js   # módulo products
Como referência, confira o Exemplo do Carrinho de Compras (opens new window).