Lógica de negócios versus camada de serviço

9

Li esta resposta: https://softwareengineering.stackexchange.com/a/234254/173318, por favor, corrija meu entendimento.

Regras de negócios refere-se à lista de etapas dos negócios no mundo real (sem códigos).

A lógica de negócios refere-se ao processo de conversão das regras de negócios em códigos e esses agrupamentos / tipos de códigos endereçados como "lógica de negócios".

E para que serve a camada de serviço? se eu ler esta resposta, não parecerá diferente com a lógica comercial https://stackoverflow.com/a/4817935/4190539

A camada de serviço é um local para a lógica de negócios e o repositório se encontrarem?

Kakashi
fonte
11
"camada de serviço" é um termo genérico, pode ser ou conter o que você quiser. A pergunta que SO que você citou estava falando sobre a "camada de serviço no ASP.NET MVC", que dá ao termo um foco mais específico. Você está intencionalmente falando sobre o último? Ou você simplesmente perdeu a diferença?
Doc Brown
é isso que eu tenho até agora. mas eu adoraria ouvir sua explicação sobre todos eles.
Kakashi #

Respostas:

11

"Camada de serviço" é um termo arquitetural. Refere-se a uma parte do sistema que fica em algum lugar no meio de uma arquitetura de várias camadas , abaixo da camada de interação do usuário, mas acima da camada de acesso a dados.

A lógica de negócios pode ser implementada na camada de serviço, reforçando as regras de negócios.

Observe, no entanto, que há casos em que a lógica de negócios acaba em outras camadas. Por exemplo, algumas regras de negócios são aplicadas na camada de interação do usuário para melhorar a experiência do usuário (por exemplo, validadores escritos em Javascript para que você possa verificá-las sem uma ida e volta ao servidor). Quando for esse o caso, a camada de serviço geralmente duplicará a aplicação.

Outras regras de negócios só podem ser aplicadas na camada do banco de dados, por exemplo, quando há preocupações de simultaneidade (imagine um aplicativo em que você pode consultar um livro da biblioteca) ou preocupações de desempenho (imagine um programa que calcule a comissão anual de um funcionário ocupado, com base em uma estrutura complexa de taxas).

John Wu
fonte
está tudo bem se eu tiver o diretório de serviço e contiver classes como um local onde eu coloquei a lógica de negócios e injeto o repositório, outro serviço, validação aí?
Kakashi #
Sim, é natural injetar outros serviços, incluindo acesso a dados, em uma camada de serviço - ele precisa armazenar dados de alguma forma e, se escrito corretamente, não sabe como fazê-lo sozinho.
John John Wu
repositório não deve conter nenhum código comercial, certo? significa que o repositório deve estar livre de validação, filtro ou qualquer outra manipulação de strijg, como strtolower, por exemplo?
Kakashi #
Não necessariamente (eu já dei dois exemplos no meu post), mas é uma boa prática mover o máximo possível de lógica de negócios para a camada de serviço.
John Wu
oh ok, btw você tem código padrão de repositório que eu posso ver?
Kakashi