Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Dorian Neto

Service layer

Recommended Posts

Fala pessoal, blz?

 

Confesso que estou bastante confuso com relação a esse assunto no geral, pois passei quase a tarde toda pesquisando sobre patterns, arquiteturas etc e meio que minha cabeça deu um nó haha

 

Entendo a necessidade de uma camada de serviço em uma aplicação, porém, estou um pouco confuso com a utilização em um caso específico. Gostaria de entender se um serviço precisa ser necessariamente relacionado a um model.

 

Em uma aplicação que estou desenvolvendo existe um model User, e o mesmo pode atuar de diversos tipos (stakeholder, support, agent etc) na aplicação. Isso é possível a partir de uma relação com o model a Role... Enfim.

 

Minha dúvida é com relação a(s) camada(s) de serviço(s) que deve(m) ser criada(s) para o model User. Devo criar um único serviço que trata todos os tipos de usuários possíveis, como UserService; ou um serviço para cada tipo de usuário, como UserService (sendo essa uma abstração ou não), AgentUserServiceStakeholderUserService etc; ou um serviço para cada tipo de ação, como CreateUserService, UpdateStakeholderUserService etc.

 

Enfim, espero que não tenha ficado confuso, e se tiver ficado, provavelmente é um reflexo do quanto eu estou confuso nesse momento hahaha

 

Vlw pessoal, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende muito da responsabilidade de cada um.

 

Se o processo de criar um usuário, independente do que ele seja, é uniforme, não há o porque de se criar um service para cada tipo de usuário. Afinal das contas, todos são usuários.

 

Entretanto, se isso envolve outras áreas do sistema, vale a pena mapear e procurar o que é específico de cada usuário e, assim então, criar uma especialização de cada usuário.

 

Além disso, existe o fato de que, ao criar um serviço abstrato e suas especializações, você fecha o conjunto de classes para modificações, mas abre para extensão (Open-closed principle). Mas deve-se perguntar a primeira pergunta, o usuário terá um comportamento completamente diferente, ou apenas o seu relacionamento com a role que determina seu comportamento. Se for apenas o relacionamento com a role, não há porque especializar cada usuário.

 

De qualquer forma, não conheço o cenário completo que você está trabalhando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Heming

 

Cada tipo de usuário terá um comportamento diferente no sistema, até mesmo no processo de criação.

 

Acredito que irei criar, além do serviço do usuário principal (abstração), irei gerar uma especialização para cada tipo de usuário, pois desta forma conseguirei separar melhor as responsabilidades de cada um.

 

Minha principal dúvida era se eu deveria me prender apenas a criar serviços relacionados ao respectivo model, e pelo visto, cada caso é um caso. Se for preciso, posso criar sim abstrações, especializações etc.

 

Te agradeço demais pela resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites
54 minutos atrás, Dorian Neto disse:

[...]se eu deveria me prender apenas a criar serviços relacionados ao respectivo model, e pelo visto, cada caso é um caso[...]

Exatamente.

 

Se você for analisar os seguintes casos:

  • Banco de dados;
  • Entidades;
  • Modelos.

Um modelo (Model), pode possuir entidades (Entities). Entidades, por sua vez, podem estar persistidas em um banco de dados (Storage). Entretanto, isso não significa que pode existir apenas um modelo por entidade, uma entidade por tabela e/ou vice-versa. Isso é apenas comum por uma questão de "comodidade" e conhecimento. Visto o fato que é mais fácil desenvolver 1:1 quando se tem apenas esse conhecimento de desenvolvimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por José Eduardo Cruz
      Quando quero usar algum  filtro somente em uma parte de uma imagem eu duplicava o "background", ia em LAYER/LAYER MASK/ HIDE ALL. e aparecia , na parte de LAYERS a imagem com a layer criada em preto. Usava um pincel bem leve, com dureza praticamente ZERO para ir sumindo nas bordas na cor branca e quando eu passava o pincel sobre a imagem, mas na LAYER MASK, a imagem ia sendo pintada de preto. Não sei porque agora não estou conseguindo fazer isto. A imagem não pinta e eu fico sem controle se estou fazendo correto. O que pode ser?
      Alguma configuração que mudou? Muito grato.
    • Por rockrgo
      Boa tarde pessoal,
       
      estou com uma dúvida sobre o framework cakephp 3, seria mais uma dúvida de arquitetura.
      Atualmente a aplicação aqui da empresa possui suas regras (Envio de emails, logs, etc) todas no controller, porém os métodos dos controllers acabam ficando muito grandes. Como vamos refatorar algumas coisas e implementar funcionalidades novas, estavamos discutindo sobre este assunto.
       
      Na opinião de vocês como é melhor implementar estas regras da aplicação?
       
      Já utilizei o Zend e com ele eu tinha uma camada de Serviço (Service layer), onde pensei em implementar no Cake, mas não sei se seria o correto. Já li diversos artigos dizendo que as regras devem ficar no model, mas também não acho correto o model ficar responsável em disparar o envio de email e também acabaria ficando um Model enorme. Então estou nesse dilema, espero que possam me ajudar a clarear um pouco a mente.
       
      Valeu, fico no aguardo
    • Por srmacedo
      Oi. Alguém poderia me explicar como funciona o preg_replace? Eu uso porém de forma limitada.
      Não entendo as patterns... Obrigado desde já.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.