---
# System prepended metadata

title: Untitled

---

## exemplo de arquitetura hexagonal
![](https://i.imgur.com/Lf8MO7B.png)

## em java/spring:
- handler: entradas async
- controller: entradas sync
- service: logica
- repository: conexão com banco de dados
- DTO: objeto read-only
- model: objeto read/write


## em rust

### opção 1: 
- Domain (para estruturas de regra de negócio)
- Service (para wrappers de objetos de repositório, mensageria, etc...)
- Handler (abstração que recebe um input, um output e processamento, esse cara usa repositório, mensageria etc..) (poderiamos usar o tower::Service pra ele?)
> [name=M Consoli] "*poderiamos usar o tower::Service pra ele?*"
> mas então teriamos dois padrões em cima de algo chamado `Service` (nomenclatura de cima vs tower), mas com semantica diferente?
> [name=L Andreussi]"Se usarmos o tower::Service nesse caso não teriamos uma trait Handler, não sei se faz sentido termos algo do tipo impl Service for RegionHandler
- Messagery (abstração de mensageria) (aqui podemos quebrar em dois se necessário(Producer, Consumer))
- Repository (abstrações de interação com banco)
- IntoMessage (trait que vincula uma struct para um tópico)

### opção 2:
 - Context
 - Ports
 - Wire
 - Db
 - Handler
 
### opção 3:
 - Context 
 - Service (using `tower::Service`)
 - Producer (as Messagery)
 - Consumer (as Messagery)
 - Repository
 - Handler


## definições
- usar mod.rs dentro das pastas (ex.: https://github.com/hrkfdn/ncspot/blob/main/src/model/mod.rs)
- para outras coisas, seguir o https://code.ifoodcorp.com.br/ifood/logistics/vendor/boundary/logistics-janitor
- para outras ideias que quiser divergir do logistics-janitor, puxar thread no canal do squad (ex.: debate de crates over modules)
- RFC de Arquitura Hexagonal de Rust no iFood + template no Furnace

## referencias
https://rust-lang.github.io/api-guidelines/naming.html
https://alexis-lozano.com/hexagonal-architecture-in-rust-1/
https://www.reddit.com/r/rust/comments/tffglg/looking_for_some_small_rust_projects_with_an/
https://github.com/idursun/vacuum
https://code.ifoodcorp.com.br/ifood/logistics/vendor/boundary/logistics-gateway/-/tree/master/src/logistics_gateway
https://code.ifoodcorp.com.br/ifood/logistics/vendor/integration/logistics-generic-connector
https://code.ifoodcorp.com.br/ifood/logistics/vendor/integration/logistics-ifood-connector
https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html