Programação Funcional em C# — Parte 02

Atendendo os princípios da imutabilidade

  • Os métodos estão, teoricamente, acoplados entre si, onde um depende do outro para sua execução. Porém não está claro isso, pois pode-se alterar, facilmente, a ordem deles sem apresentar erros.
  • Os side effects estão ficam ocultos nesse caso, pois nós alteramos os valores de “Question” e “Answer”, porém essa operação não é explicitada. Além disso, o método “SaveQuestion” oculta as entradas, ao salvar uma “Question”.
  • Vamos eliminar os campos privados, pois não vamos precisar mais deles. Até o momento, poderíamos assimilá-las à variáveis globais, e isso, desde os tempos de universidade, nós aprendemos que não é uma boa prática na maioria dos casos.
  • Vamos deixar explícitos as entradas e saídas de cada método.
  • CQS (Command-Query Separation Principle): A ideia é separar os comandos, que causam os efeitos colaterais, das consultas, que estão “livres” desses efeitos. Os comandos, que alteram algo, devem ser do tipo void, ao contrário das queries, que recebem uma entrada e retornam algo, exaltando que a ideia das queries é não alterar nada e isso deve estar claro.
Imagem retirada do curso Applying Functional Principles in C#
  • Simplificação das regras de negócio
  • Fácil de testar
  • CQS implantando “arquiteturalmente”, onde conseguimos separa os Efeitos
  • Operações ficam transparentes, nas regras de negócio.
Imagem retirada do curso Applying Functional Principles in C#
  • Primeiro é cadastrado o cliente, recebendo uma entrada, processa/realiza algumas validações, devolve para a camada externa e salva o cliente
  • Em seguida, faz o mesmo com os produtos, para realização da compra

--

--

Bachelor in Computer Science, MBA in Software Architecture and .NET Developer.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store