Skip to content

Instantly share code, notes, and snippets.

View danilobatistaqueiroz's full-sized avatar

Danilo Batista de Queiroz danilobatistaqueiroz

View GitHub Profile

Padrões de Projeto

Active Record
Uma tabela de banco de dados ou visão(view) é embrulhada(wrapped) em uma classe.
Uma instância de um objeto é amarrada a um único registo(tupla) na tabela.
A classe de embrulho implementa os métodos de acesso (save,find,update,delete).
E também as propriedades (setter e getter) para cada coluna na tabela ou visão.

Padrão Mapeador de Dados (Data Mapper Design)
Um Mapeador de Dados é uma Camada de Acesso a Dados que executa a transferência bidirecional de dados

@danilobatistaqueiroz
danilobatistaqueiroz / environment.md
Last active May 15, 2019 20:24
Configurando Variaveis no Windows

Configurando variáveis de ambiente no Windows

Entre no Regedit
Em HKEY_CURRENT_USER -> Environment
E adicione Strings
Por exemplo, para o java_home, de esse nome e coloque o caminho
Para configurar o PATH, crie uma String com esse nome e preencha com as configurações
Reinicie o Windows e agora ele sempre terá essas variáveis configuradas

regedit

@danilobatistaqueiroz
danilobatistaqueiroz / spring_jms_activemq.md
Last active May 24, 2019 17:51
Tutorial Spring JMS ActiveMQ

Tutorial Spring 4 MVC + JMS + ActiveMQ annotation based

Teremos dois aplicativos java baseados em Spring.
O primeiro é um aplicativo Spring MVC (chamaremos de Web-Shop) onde você pode comprar um produto on-line.
O outro será o aplicativo de Inventário (chamaremos de Order-Inventory), baseado no Spring MVC, implantado como war.

Depois de ter feito seu pedido (significa que o status do pedido é 'criado'),
O aplicativo de loja virtual (Web-Shop) envia este pedido para o aplicativo de Inventário
Ele envia via ActiveMQ Message Broker usando a fila JMS (nomeada como 'order-queue'),

@danilobatistaqueiroz
danilobatistaqueiroz / CompositionInheritance.md
Last active May 12, 2019 19:11
Composition over Inheritance

Has-a over Is-a

A composição sobre herança (ou princípio de reutilização composto) na programação orientada a objeto (OOP)
é o princípio de que classes devem alcançar comportamento polimórfico e reutilização de código por sua composição
(contendo instâncias de outras classes que implementam a funcionalidade desejada) em vez de herança de um classe base ou pai.
Este é um princípio frequentemente afirmado de OOP, como no influente livro Design Patterns.

Composição é a forma mais forte de associação, o que significa que o(s) objeto(s) que compõem ou estão contidos
em um objeto são destruídos também quando esse objeto é destruído.

Exemplo

Spring e ORM

Spring é popular porque cuida de todo código repetitivo de recortar e colar que você tem com qualquer estrutura ORM.
Pense em try ... finally blocks, lidando com o objeto de sessão (Hibernate ou outro) e commit / rollback (transações).
Isso você terá que repetir diversas vezes, tornando o código poluído e de difícil manutenção, propenso a erros.

O gerenciamento de transações também é talvez o grande carro chefe do Spring.
Você pode definir transações usando anotações ou no arquivo de configuração do Spring xml.
No arquivo de configuração, o benefício é que você pode usar curingas para especificar que, por exemplo,
todos os métodos de busca em alguns conjuntos de pacotes devem suportar transações (PROPAGATION_SUPPORTS),

@danilobatistaqueiroz
danilobatistaqueiroz / solid.md
Last active May 11, 2019 18:44
SOLID Principles

The principles are a subset of many principles promoted by American software engineer and instructor Robert C. Martin.

Single responsibility principle
A class should have only a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the class.
Um bom exemplo seria uma classe "Encomenda", ela não pode ter métodos para alterar a "NotaFiscal".
Um exemplo mais abstrato seria evitar criar classes multi funções, como encontramos demasiadamente na camada de "serviços", ou mesmo nas "controllers", quando elas deveriam apenas orquestrar os requests e responses, essa é a única responsabilidade das "controllers". Pois, se você começar a implementar muita coisa na "controller", seu código torna-se dependente do framework, e na melhor das hipóteses, torna o teu "domínio" amarrado à web o que nunca é boa ideia.
Outro exemplo seria uma classe "ProdutoValidador", nessa classe não pode haver métodos que alterem o produto, por que a

GOF

São 23 padrões de projetos catalogados por Erich Gamma, Jonh Vlissides, Ralph Johnson, Richard Helm.
Escritos no livro Design Patterns: Elements of Reusable Object-Oriented Software (1994)

Os padrões de projeto GoF descrevem como resolver problemas recorrentes de projeto em software orientado a objetos.
São problemas comuns que eles catalogaram e pesquisaram o que os desenvolvedores costumavam usar de melhores técnicas para solucioná-los.


@danilobatistaqueiroz
danilobatistaqueiroz / ddd.md
Last active January 14, 2023 22:52
DDD - Domain Driven Design

DDD é um conjunto de boas práticas de orientação a objetos e um padrão de modelagem de sistemas, uma metodologia para aplicação de conceitos e padrões no projeto.

DDD tende a ser uma idéia geral focando em entender primeiro o domínio.
Os problemas em questão, os objetos com os quais está trabalhando.
São construídos os modelos primeiro, ferramentas para manipulá-los em segundo lugar, e depois a lógica de negócios no topo para resolver os problemas de domínio por exigência de negócios.
Normalmente trabalha em mecanismos de persistência em seguida, e apresentação por último.

Isso vem em contrapartida com o uso comum do Data-Driven Design ou Projeto Orientado a Dados, que a maioria dos desenvolvedores usa sem mesmo ter consciência disso. Devemos em um primeiro momento esquecer de como os dados são persistidos e nos preocupar mais em como representar melhor as necessidades de negócio em classes e comportamentos.