Oi Breno! Tudo bem?
É ótimo ver que você está explorando diferentes arquiteturas em Go! Assim como em Java, onde você tem uma separação clara entre repositórios, serviços e controladores, em Go você também pode adotar uma abordagem semelhante para manter o código organizado e fácil de manter.
Embora o exemplo que você tenha visto até agora no curso concentre a lógica no controlador, não é necessariamente o padrão da linguagem. Na verdade, é uma prática comum em Go dividir as responsabilidades em camadas, especialmente em projetos maiores. Isso ajuda a manter o código limpo e modular.
Aqui está uma sugestão de como você pode estruturar seu projeto em Go:
Repositórios: Esta camada lida com a interação com o banco de dados. Você pode criar interfaces e implementações que encapsulam as operações de banco de dados.
type PersonalidadeRepository interface {
Create(personalidade *models.Personalidade) error
FindAll() ([]models.Personalidade, error)
FindByID(id int) (*models.Personalidade, error)
}
Serviços: Esta camada contém a lógica de negócio. Os serviços usam os repositórios para acessar os dados e podem implementar regras de negócio.
type PersonalidadeService struct {
repo PersonalidadeRepository
}
func (s *PersonalidadeService) CreatePersonalidade(personalidade *models.Personalidade) error {
return s.repo.Create(personalidade)
}
Controladores: Esta camada lida com as requisições HTTP. Os controladores chamam os serviços para realizar operações e retornam as respostas apropriadas.
func (c *Controller) CriaUmaNovaPersonalidade(w http.ResponseWriter, r *http.Request) {
var novaPersonalidade models.Personalidade
json.NewDecoder(r.Body).Decode(&novaPersonalidade)
err := c.service.CreatePersonalidade(&novaPersonalidade)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
json.NewEncoder(w).Encode(novaPersonalidade)
}
Essa estrutura ajuda a manter seu código organizado e facilita a manutenção e a escalabilidade do seu projeto. Espero que isso ajude a esclarecer suas dúvidas sobre a arquitetura em Go!
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.