Arquitetura limpa
Notes
- Os testes mostram a presença, não a ausência, de bugs;
- Pilares da OO:
- Herança: é a habilidade de herdar os atributos e métodos da class pai;
- Encapsulamento: Refere-se a controlar o que e como é alterado os atributos de um objeto;
- Polimorfismo: está ligado a várias formas. pois geralmente é uma interface que será implementada de acordo com a necessidade de cada uso. sendo assim, uma mesma função terá várias forma de processamento de informação, irá lidar com o dado da forma adequada para cada situação.
- A programação Estruturada é a disciplina imposta sobre a transferência direta de controle.
- A Programação Orientada a Objeto é a disciplina imposta sobre a transferência indireta de controle.
- A Programação Funcional é a disciplina imposta sobre a atribuição de variáveis.
- S.O.L.I.D
- SRP (Single Responsibility Principle) -> O que faz parte ou não de uma entidade. Separar por responsabilidade pertences de cada entidade. Responsabilidade essa que pertence a atores diferentes.
- Diagrama de exemplo do caderno de anotações
- OCP (Open Closed Principle) -> Basicamente entende-se que o software está aberto para expansão e fechado para modificação. O código receberá novas classes mas ele precisa está preparado para expandir com o novo código e que não seja necessário modificar o código já existente para o novo código funcionar. Eu lembro de um exemplo dado por Branas.
- LSP (Liskov Substitution Principle) -> Não poderá lançar nenhuma exceção ao usar a herança ou substituição de métodos. o software não poderá quebrar ao fazer a "nova" implementação.
- ISP (Interface Segregation Principle) -> Terá problemas ao ter dependências de items desnecessário. É interessante usar interfaces para limitar o necessário, pois no momento que precisar lançar uma exceção por não precisar de um método, porém ser obrigado a implementar, está violando o LSP.
- DIP (Dependency Inversion Principle) -> A principio, não depender de implementações concretas e sim de interface, classes abstratas ou outro tipo de declaração abstrata, pois são mais estáveis, enquanto implementações concretas são mais sucetíveis a mudanças.
- SRP (Single Responsibility Principle) -> O que faz parte ou não de uma entidade. Separar por responsabilidade pertences de cada entidade. Responsabilidade essa que pertence a atores diferentes.
- Regras de negócios é o que a economiza ou gera dinheiro para empresa sendo manual ou automatizado.
- Regra de negócio é aquele que pode ser executado de forma manual independente de automatização;
- Regra de negócio da aplicação é aquela que só pode ser executada em sistema automatizado
- Casos de uso são ações feitas com as entidades que por sua fez é onde fica as regras e dados cruciais de negócios.
- as entidades não conhece os casos de uso, porém os casos de uso conhece as entidades
ler Object Oriented Software Engineering: a use case driven approach
ler Growing object oriented software with tests
- Fala sobre ports e adapters
- [?] Arquitetura Hexagonal?
- Entidades -> regras de negócios da empresa
- Caso de uso -> Regras de negócios da aplicação
- [!] As entidades e casos de uso consegue ser executadas sem nenhuma dependência como base de dados, framework ...
- YAGNI -> You aren't going to need it
- hunt the wumpus -> é um jogo antigo
- Padrões de projetos para serem estudados:
- [?] A arquitetura de um sistema é definida pelos seus limites específicos dentro desse sistema e pelas dependências que cruzam esses limites?
- page 251: sobre testes: não dependa de coisas voláteis para construção de testes
- Um anti-pattern é quando uma prática afeta o sistema de forma negativa
- [?] software embarcados? Firmware?
Source: