Ouvi pessoas falarem muito sobre lógica de negócios no trabalho e online, e li várias perguntas neste site sobre isso, mas o termo ainda não faz muito sentido para mim. Por exemplo, aqui estão algumas declarações (parafraseadas) que frequentemente vejo:
"A lógica de negócios é a parte do seu programa que codifica as regras de negócios reais." A maioria das definições que li são circulares como esta.
"A lógica de negócios é tudo exclusivo para seu aplicativo em particular". Não vejo como isso é diferente de "seu aplicativo em particular não passa de lógica de negócios", a menos que acidentalmente reinventássemos várias rodas para as quais poderíamos ter usado o software de terceiros existente. Daí o título da pergunta.
"Deve haver uma camada de lógica de negócios acima da camada de acesso a dados e abaixo da camada da GUI." No código que eu escrevo, os acessadores do banco de dados precisam saber quais dados eles devem acessar, e o código da interface do usuário precisa saber muito sobre o que está sendo exibido para exibi-lo corretamente, e não há realmente nada entre eles esses dois lugares que não sejam a transmissão de dados entre cliente e servidor. Então, o que realmente deve entrar em uma camada de lógica de negócios?
"A lógica de negócios deve ser separada da lógica de apresentação." A maioria das solicitações de recursos que recebemos é alterar a lógica da apresentação por razões comerciais. Se uma das regras de negócios é exibir os preços dos títulos do governo dos EUA na notação 32ª por padrão (além de fornecer uma interface do usuário para o usuário configurá-la), a lógica da apresentação precisa saber pelo menos que essa regra existe, se não implementá-la completamente. Além disso, parece que grande parte do design do UX está ajudando o usuário a entender as regras de negócios que nosso software está tentando implementar.
É possível que eu esteja em uma equipe que faça apenas lógica de negócios e toda a lógica não-comercial esteja sendo executada por outras equipes? Ou todo o conceito de "lógica de negócios" como entidade separada só é viável para certos aplicativos ou arquiteturas?
Para ajudar a tornar as respostas concretas: Finja que você precisa reimplementar o aplicativo Pizza do Domino. Qual é a lógica comercial e qual é a lógica não comercial desse aplicativo? E como seria possível colocar essa lógica de negócios de pedidos de pizza em sua própria "camada" de código, sem que a maioria das informações da pizza penetrasse nas camadas de acesso e apresentação de dados?
Atualização: cheguei à conclusão de que minha equipe provavelmente está executando 90% do código da interface do usuário e a maioria - mas não toda - do que você chamaria de lógica de negócios vem de outras equipes ou empresas. Basicamente, nossa aplicação é para monitorardados financeiros e quase todos os recursos são formas de o usuário personalizar os dados que vê e como os vê. Não há compras ou vendas em andamento (apesar de nos integrarmos um pouco a outros aplicativos de nossa empresa que fazem isso), e os dados reais são fornecidos por várias fontes externas. Mas permitimos que os usuários façam coisas como enviar cópias de seus "monitores" para outros usuários, portanto, os detalhes de como lidamos com isso provavelmente se qualificam como lógica de negócios. Na verdade, existe um aplicativo móvel que atualmente fala com parte do nosso código de back-end, e eu sei exatamente qual parte do nosso código de front-end gostaria que ele compartilhasse com nossa interface do usuário em um mundo ideal (basicamente o M em nosso quase-MVC). Acho que esse é o BLL para nós.
Estou aceitando a resposta do user61852, pois ela me deu uma compreensão muito mais concreta do que "lógica de negócios" faz e não se refere.