Template for microservices repositories based in Clean Arch
The main objective is to provide a template for repositories that can be used as a starting point for new projects. This architecture is based on the Clean Architecture, and it was based in many other projects and books, articles that were mixed by the students of Mauá Institute of Technology, from the academic group Dev. Community Mauá.
The project aims to help developers to start new projects with a good architecture, and with a good structure, so that anybody can create good applications.
The purpose of the project is to learn and create a Clean Architecture for microservices stateless with AWS Lambda which is a way of structuring the code in layers, each of which has a specific responsibility. This architecture is based on the principles of SOLID and books like "Clean Architecture: A Craftsman's Guide to Software Structure and Design" by Robert C. Martin.
We also tried to explain for new programmers in the mos intuitive way and you can see the explanation here: Clean Architecture Figma
Our folder structure was developed specially for our projects.
.
├── iac
├── src
│ ├── modules
│ │ ├── create_user
│ │ │ └── app
│ │ ├── delete_user
│ │ │ └── app
│ │ ├── get_user
│ │ │ └── app
│ │ └── update_user
│ │ └── app
│ └── shared
│ ├── domain
│ │ ├── entities
│ │ ├── enums
│ │ └── repositories
│ ├── helpers
│ │ ├── enum
│ │ ├── errors
│ │ ├── functions
│ │ └── http
│ └── infra
│ ├── dto
│ ├── external
│ └── repositories
└── tests
├── modules
│ ├── create_user
│ │ └── app
│ ├── delete_user
│ │ └── app
│ ├── get_user
│ │ └── app
│ └── update_user
│ └── app
└── shared
├── domain
│ └── entities
├── helpers
└── infra
- Files have the same name as the classes
- snake_case 🐍 (ex:
./app/create_user_controller.py
)
-
- CamelCase 🐫🐪
-
- Interface starts with "I" -->
IUserRepository
,ISelfieRepository
😀 - Repository have the same name as interface, without the "I" and the type in final (ex:
UserRepositoryMock
,SelfieRepositoryDynamo
) 🥬 - Controller ends with "Controller" -->
CreateUserController
,GetSelfieController
🎮 - Usecase ends with "Usecase" -->
CreateUserUsecase
,GetSelfieUsecase
🏠 - Viewmodel ends with "Viewmodel" -->
CreateUserViewmodel
,GetSelfieViewmodel
👀 - Presenter ends with "Presenter" -->
CreateUserPresenter
,GetSelfiePresenter
🎁
- Interface starts with "I" -->
- snake_case 🐍
- Try associate with a verb (ex:
create_user
,get_user
,update_selfie
)
- snake_case 🐍
- Avoid verbs
- SNAKE_CASE 🐍
- File name ends with "ENUM" (ex: "STATE_ENUM")
- snake_case 🐍
- "test" follow by class name (ex:
test_cadastrar_usuario_valido
,test_cadastrar_usuario_sem_email
)- The files must start with "test" to pytest recognition
- Start with verb
- Ends with emoji 😎
Clone the repository using template
python -m venv venv
virtualenv -p python3.9 venv
venv\Scripts\activate
source venv/bin/activate
pip install -r requirements-dev.txt
pytest
STAGE = TEST
- Bruno Vilardi - Brvilardi 👷♂️
- Hector Guerrini - hectorguerrini 🧙♂️
- João Branco - JoaoVitorBranco 😎
- Vitor Soller - VgsStudio ☀
- Lucas Duez - Lucasdvs10 🤡
- Rodrigo Morales - RodrigoM2004 🚗
- Lucas Milani - LucasKiller 🔪
- Rafael Rubio - Rubiozito 🎸