Jump to content
rockrgo

Arquitetura de Software - Cakephp 3

Recommended Posts

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

Share this post


Link to post
Share on other sites

É um único controller para tratar de envio de email, gerar logs e etc?

E sim, seria totalmente errado deixar uma classe model ser responsável por essas responsabilidade.

Share this post


Link to post
Share on other sites
11 horas atrás, rockrgo disse:

Já utilizei o Zend e com ele eu tinha uma camada de Serviço (Service layer), onde pensei em implementar no Cake

Camada Serviços não é inerente ao Zend Framework, é um Design Pattern,  e como o cake 3 implementa PSR-4 nada lhe impede de usar, claro que no cake2 isso é um pouco mais complexo, mas não é o caso do Cake 3.

 

11 horas atrás, rockrgo disse:

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.

A única responsabilidade do controller é transacionar dados, envio de email e logs são eventos que ocorrem na aplicação, mesmo em MVC não é responsabilidade do controller e muito menos da model disparar estes eventos, ai que entra o Pattern Service Layer, que é responsável por carregar estes objetos. Carregar é diferente de incluir toda a logica dentro.

 

11 horas atrás, rockrgo disse:

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.

Depende de Qual Model você está se referindo, MVC ou DDD?, se for dos conceitos da arquitetura DDD - "Domain-Driven Design", O correto é na Pasta Model in Domain ter estes agregados.
 

Citar

 

Domain/

      Model/ (camada do domínio)
               Payments/ (domain aggregate)
                         Payment.php (domain entity/aggregate root)
                         PaymentService.php (domain service)
                         PaymentRepository.php (repository contract)
                         PaymentLineWasAdded.php (domain event)

 

                       
Detalhe  MVC não resolve todos os problemas de arquitetura, somente ajuda organizar melhor o seu código, senão ainda teríamos os códigos spaghettis da vida. Mas os padrões estão ai para serem usados, e resolver problemas de design. 

  • +1 1

Share this post


Link to post
Share on other sites

@Williams Duarte desculpa é que não me expressei muito bem, sei que Service layer é um pattern, é porque no Zend eu tinha mais liberdade para implementar, por isso o exemplo dele.

 

Valeu cara, já clareou um pouco mais as ideias aqui. Vou tentando implementar aqui e qualquer dúvida volto a postar no fórum.

 

Obrigado

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By thewesker
      Estou escrevendo uma aplicação MVC em PHP e a estrutura de diretórios é a seguinte:
      - root ¬ app ¬ controllers ¬ models ¬ views ¬ core ¬ config ¬ public Na pasta “app” fica as camadas MVC. Em “controllers” coloco classes que vão receber dados e acionar models e/ou renderizar views. Nos “models” coloco basicamente as entidades do banco de dados e suas operações. Em “views” coloco as páginas com código html + php para exibição de dados No “core” coloco classes e/ou arquivos genéricos (tenho planos de usar essa mesma base para desenvolver outras aplicações futuramente, uma espécie de microframework.) No entanto surgiu duas classes um pouco diferentes, uma delas trabalha com datas e realiza operações como conversão e cálculo entre datas, a outra cria e gerencia múltiplas threads. Tenho dúvida em qual camada devo colocá-las, já que nenhuma delas fazem acesso a banco de dados ou arquivos e nem emite saídas, apenas retornam valores.
       
      Devo criar uma camada adicional? Qual? Devo colocá-la em um das camadas já existentes?  
      Obs: qualquer informação adicional que possa ser útil é sempre bem-vinda!
    • By Dorian Neto
      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), AgentUserService, StakeholderUserService 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!
    • By lucasburg
      Bom dia gente boa, 
       
      seguinte, tenho que implementar uma solução web (php). Vou começar com uma breve descrição. 
       
      O usuário terá que seguir varias etapas com o botão avançar e ele pode voltar a etapa anterior logicamente com o botão voltar.
      Cada etapa terá alguns campos para o usuário preencher, por volta de 10 campos.
      A partir da etapa 3 o usuário não pode voltar, porque ele não pode alterar a escolha que fez.
      O usuário poderá dar refresh na página sem perder os dados, voltar ao inicio e voltar para onde parou, ex: etapa 4, 5 ou 9...
       
      A duvida é: Como devo implementar isso? Ajax, com campos hidden (mais de 50 campos fácil fácil...), salvar tudo na sessão, salvar no banco e buscar a cada refresh, crio varias abas...
       
      Deixei a pergunta bem aberta, mas espero que a imaginação de vocês somem com a minha para uma discussão bacana, valeu galera!
    • By claudiojuniorfabiao
      Olá, pessoal!
       
      Estou planejando criar uma API RESTful, que retorna conteúdo somente em JSON e executa algumas tarefas de CRUD em entidades do meu domínio, para ser consumida por um cliente HTML usando AngularJS, mas estou com algumas dúvidas.
       
      Antes, quando estava recuperando todo o HTML do servidor, minha aplicação estava estruturada segundo à arquitetura MVC, todavia, agora, não sei se é proveitoso usar essa arquitetura na minha API.
       
      Se alguém tiver uma opinião de porquê usar ou não MVC, ou outra arquitetura e/ou exemplos de implementação, será de grande ajuda.
       
      Desde já obrigado.
    • By W. Thiago Costa
      Saudações a todos,
       
      Primeiramente peço desculpas se postei o tópico no lugar errado vez que este é o primeiro.
       
      Pois bem, estou desenvolvendo uma aplicação na qual tenho duas tabelas associadas: "locations" e "numbers".
       
      Deste modo a tabela "locations" tem muitos "numbers", em cake,  "LocationsTable" hasMany "NumbersTable". Logicamente que o inverso é verdadeiro "NumbersTable" belongsTo "LocationsTable".
       
      Assim existe os Controllers e Views de ambos os modelos.
       
      Desta forma, gostaria de saber como faço para utilizar o Plugin de busca do friendsofcake para para filtrar na view do controller Numbers, além dos campos da tabela numbers, os da tabela locatioins.
       
      Não sei se fui claro o bastante, mas agradeço qualquer ajuda. Segue meu repositório git:  git@github.com:wtccosta/teleman.git .
       
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.