2

Boa noite, pessoal.

Estava desenvolvendo um software e comecei a pensar sobre qual seria a melhor forma de implementar o Repository Pattern.

Tenho que retornar para o controller dados de cidades e estados, para isso tenho dois modelos em minha aplicação.

public class Estado
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Uf { get; set; }
        public virtual ICollection<Cidade> Cidades { get; set; }
    }

   public class Cidade
   {
          public int Id { get; private set; }
          public string Nome { get; set; }
          public string Uf { get; set; }
          public int IdEstado { get; set; }
          public virtual Estado Estado { get; set; }
      }

Daí então eu utilizo o MVC , por ele eu acesso os services e dos services, os repositórios... Comecei a pensar então, seria melhor utilizar um EnderecoService e dentro dele adicionar os repositorios de estado e cidade ? Ou Criar EstadoService e CidadeService ? Ou até utilizar EnderecoService, mas dentro também ter um EnderecoRepository que me retornaria Estados e Cidades ?

Gostaria de saber de vocês, como vocês veem a melhor abordagem e porque.

Obrigado!

5
  • 1
    Você utiliza algum OR/M para acesso a dados? Se estiver, recomendo que você não utilize repostiory pattern como camada de abstração e utilize o próprio OR/M como abstração. Assim você não perde features importantes do seu OR/m Commented 9/09/2015 às 12:08
  • Utilizo o Entity, como funcionaria essa abstração ?
    – Kevin
    Commented 9/09/2015 às 13:26
  • Acho que a ideia do Eduardo é acessar diretamente o Entity a partir dos controllers, sem repositório ou serviços para guiar o repositório. Muita gente que usa MVC defende essa arquitetura.
    – RSinohara
    Commented 9/09/2015 às 13:58
  • Exato, utilize o Entity diretamente nos seus serviços, assim você consegue utilizar melhor os recursos do EF sem a limitação dada pelos repositories ou daos Commented 9/09/2015 às 14:30
  • Mas dessa forma eu fico com alguns tipos de lógica centralizadas no meu controller, sem que eu possa reaproveitar em outras plataformas (um mobile por exemplo). Se for um service utilizando o contexto até pode ser que fique legal, tenho que testar para saber e arranjar uma forma de não adicionar dependências desnecessárias à camada de service (talvez através de di e interfaces).
    – Kevin
    Commented 10/09/2015 às 19:48

1 Resposta 1

1

É possível e comum usar um serviço por entidade. Contudo, costuma-se também usar um serviço por raiz agregada. Ou seja, para cada conjunto de relações você elege uma raiz, ou classe principal, e cria serviços para cada um destes conjuntos.

Acho que isso pode ser útil: DDD-Introdução.

No seu caso, então, acho que eu criaria um EndereçoService que trataria tudo relacionado à esse conjunto, acessando os repositórios de Estado e cidade e outros.

1
  • Eu tento fazer isso quando dá, porém, neste exemplo citado, eu teria um Usuário e o usuário teria uma lista de endereços. Para eu buscar todos os endereços livres de usuário através de um serviço de usuário não ficaria legal, daí eu crio services para eles, que servem só de busca...
    – Kevin
    Commented 9/09/2015 às 13:45

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .