Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Duvida na arquitetura

Bom minha primeira linguagem é o Java, lá se segue uma estrutura de repositorios, serviços e controladores. Já aqui no Go pelo menos até o momento ta sendo tudo feito no controlador, é esse o padrão da linguagem ou também dividi as responsabilidades em repositorios, serviços e controladores?

1 resposta
solução!

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:

  1. 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)
    }
    
  2. 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)
    }
    
  3. 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 ✓.