O que “lógica de negócios” realmente significa, se não “todo código de terceiros”?

25

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.

Ixrec
fonte
1
Você varre todo o código do andaime, infraestrutura, clichê, biblioteca sob o tapete "reinvenção da roda", mas na verdade esse é um bom pedaço de código, e nem todo poderia ser um código de terceiros. Talvez não seja exclusivo do seu produto, mas exclusivo do seu produto e de três produtos concorrentes. Talvez você tenha requisitos estranhos que excluem as soluções existentes. Talvez as soluções existentes não sejam suficientes por razões técnicas (por exemplo, não atendam às metas de desempenho - esse é um motivo comum para reinventar dados básicos estruturados no desenvolvimento de jogos).
Para nós, a infraestrutura, o código da biblioteca e o andaime são mantidos principalmente por outras equipes ou por terceiros (embora o clichê esteja uniformemente espalhado por todo o lado), por isso talvez seja tão simples quanto a equipe que faz a lógica da interface do usuário / negócios.
Ixrec
8
Se você pedir mais de US $ 50, receberá palitos grátis com queijo.
precisa saber é o seguinte
1
@ raptortech97 Ele está dizendo que "se você pedir mais de US $ 50, obterá palitos grátis de queijo" é lógica de negócios.
precisa saber é o seguinte
"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 (enquanto também fornece uma interface do usuário para o usuário configurá-la), a lógica da apresentação precisa pelo menos saber que essa regra existe" não, não e alguns diriam que não deveriam. a interface do usuário pode ter apenas que ter um rótulo / caixa de texto / widget para exibir qualquer string que a lógica de negócios (ou mais provavelmente o modelo, mas ...) passou para ela.
Joshua Drake

Respostas:

27

Vou te dar algumas dicas sobre aplicativos CRUD , já que não tenho muita experiência em jogos ou aplicativos gráficos intensivos:

  • A lógica comercial geralmente envolve regras que o proprietário da empresa aprendeu ou decidiu ao longo de anos de operação, como por exemplo: "rejeite qualquer novo crédito se o cliente ainda não tiver terminado de pagar o último" ou "não vendemos café da manhã" depois das 11 da manhã " ou " segundas e terças-feiras, os clientes podem comprar duas pizzas pelo preço de uma " .
  • É claro que a camada de apresentação deve mostrar uma mensagem indicando a disponibilidade de um desconto ou a razão de um crédito ser rejeitado, mas essa camada não está decidindo essas coisas, mas apenas comunicando ao usuário algo que aconteceu sob o capô.
  • A lógica comercial geralmente envolve um fluxo de trabalho , por exemplo: "este item deve ser aprovado dentro de três dias úteis por algum gerente ou colocado em um estágio de 'solicitação de informações', se o cliente não tiver enviado os documentos necessários, o item será rejeitado" .
  • A camada de apresentação geralmente não lida com esse tipo de fluxo de trabalho, apenas reflete os estados do fluxo de trabalho.
  • Além disso, a camada de acesso a dados geralmente é simples, porque as decisões já foram tomadas pela lógica de negócios. Essa camada é afetada quando você decide migrar seus dados do MS SQL Server para Oracle, por exemplo
  • É verdade que às vezes a GUI faz alguma validação para evitar chamadas para o servidor, mas isso é algo que deve ser feito criteriosamente ou você pode ter muita lógica de negócios nessa camada.
  • Grande parte de sua confusão pode ter surgido do fato de que em seu aplicativo não há separação de preocupações e, efetivamente, você tem muita lógica de negócios na camada de apresentação. O fato de você (erroneamente) ter lógica de negócios na camada de aplicativos ou na camada de acesso a dados não altera o fato de ser lógica de negócios.
  • Coisas como exibir distâncias no sistema métrico em vez de milhas / jardas / pés não é lógica de apresentação, é lógica de negócios . A camada de negócios precisa retornar dados nas unidades necessárias e informar à camada de apresentação quais unidades estão manipulando para mostrar os rótulos apropriados, mas é definitivamente uma preocupação da lógica de negócios.
  • A lógica de negócios não deve ser afetada pelo fato de você estar usando o Oracle agora em vez do Postgres, ou pelo fato de a empresa ter alterado o logotipo ou a folha de estilos.
  • Existem regras de negócios, independentemente de você ser automatizado ou não, escrevendo um aplicativo. Eles podem ser aplicados mesmo quando a empresa usa uma solução de baixa tecnologia, como papel e caneta.
  • Se você possui uma versão móvel do seu aplicativo para computador ou uma versão da Web , cada uma dessas versões possui uma camada de apresentação diferente , mas (espero) a mesma camada de negócios.
Tulains Córdova
fonte
5

Parece que a maior parte do seu trabalho pode estar na camada da interface do usuário. Alterar o formato de exibição por motivos comerciais, não implica lógica de negócios. A alteração é uma alteração na lógica da visualização.

Ser capaz de alterar o formato implica alguma lógica de negócios, possivelmente envolvendo a persistência da preferência.

Persistir o formato em um cookie também pode ser implementado na camada de visualização.

No entanto, isso pode ser implementado de maneira MVC. (Alguns modelos implementam a visualização como seu próprio MVC, capaz de lidar com preferências.)

  • A preferência do usuário pode ser armazenada pelo modelo (banco de dados / cookie).
  • O controlador reagiria às solicitações de formato alterando a preferência do usuário no modelo.
  • A visualização se ajustaria à preferência do usuário. A preferência pode ser solicitada no modelo ou fornecida pelo controlador.

Fazendo um palpite sobre sua inscrição.

  • Existe um modelo que contém títulos disponíveis e dados de preços para eles.
  • Existe uma visão que permite ao usuário ver várias coisas que ele pode fazer: pesquisar títulos, exibir preços, comparar rendimentos, receber pedidos e exibir os resultados retornados pelo modelo de negócios em resposta à solicitação.
  • A lógica de negócios lida com coisas como:

    • Executando uma pesquisa e fornecendo a exibição para exibição.
    • Encontrar preços para um título e prever a exibição.
    • Comparando rendimentos e fornecendo dados para a exibição ser exibida.
    • Processando pedidos e armazenando-os no modelo.

Se isso for feito corretamente, deve ser possível fornecer vários componentes de visualização sem alterar o modelo ou a lógica de negócios. Por exemplo, se o design atual for um site, um novo servidor de exibição para um aplicativo para iPhone ou Android usaria o modelo e a lógica de negócios existentes. Eles podem introduzir novas funcionalidades de negócios para fornecer notificações por push quando um pedido for atendido, o que pode exigir alterações em várias camadas.

Essa repartição permite a separação de preocupações.

  • A camada de dados representada pelo modelo tende a ser relativamente estável.
  • A camada de negócios é onde as decisões de negócios são aplicadas: a solicitação pode / será atendida? Todos os dados necessários foram obtidos? O usuário está autorizado? Existem bandeiras vermelhas na transação?
  • A camada de visualização tende a ser menos estável e pode haver mais de uma. É aí que reside a aparência do aplicativo. É possível mudar a pele de um aplicativo completamente, sem alterar as outras camadas.
BillThor
fonte