🐘🏜️🤠

Design Patterns VS Design Principles

O que se "dev" saber para dizer que sabe


PHP Velhoeste | 2025-05-31 14:08

Quem sou eu?

Francisco Alessandro Feitoza de Patricio da Rocha de Sousa da Silva


um dos maiores nomes desse evento

Alessandro Feitoza

  • Fortaleza, Ceará
  • Professor de códigos e outras computarias ( ͡° ͜ʖ ͡°)
  • Programador/Dev/Severino
  • PHP com Rapadura | PHPeste
  • Backend Developer SoftExpert

Agenda


  • Por que isso é importante?
  • Definições
  • Outras Definições
  • Mais Definições
  • e Exemplos Práticos

⚠️ Essa talk não é um mandamento


  • É uma coletânea de devaneios que tenho baseados na academia, literatura, e conhecimento das ruas
  • Só quero que você abra sua mente, seja mais crítico nas pequenas decisões (ou entenda porque elas foram tomadas)
  • Aproveite o que achar bom e descarte o restante

1 - Por que isso é importante?


Algumas pessoas que fazem código, acham melhor entregar rápido do que entregar bem

A gente esquece que não é pedreire,
e sim Engenheire de Software


E que precisamos desenhar o software
Afinal, o que é design? 🖌️ 🎨
É o momento de decidir como os códigos do sistema se organizam, se comunicam e se comportam para alcançar os objetivos desejados.

Design


do Latim, designare

de- (de dentro, para fora)
signare- ( signum, indicar algo, marcar)
"Designar, Determinar"

O processo de planejar e estruturar a solução técnica.

Mas qual é o momento de "planejar e estruturar"?

No "inicio" do projeto

Precisamos voltar alguns passos

2 - DEFINIÇÕES


Engenharia de Software

Como funciona a engenharia de software?

Como seria melhor?

Arquitetura?

Design?


Arquitetura (de soluções) é sobre a comunicação entre as diferentes tecnologias que compõem e auxiliam o Software.


Arquitetura (do código) é sobre a conunicação entre as camadas de códigos, pensando I/O

Design é sobre o "desenho" do fluxo de partes do código com o próprio código

Todo Projeto começa bonito e termina feio
seria o ideal?

Então poderiamos dizer que design de software se divide nisso?

O melhor seria isso











3 - OUTRAS DEFINIÇÕES

Patterns


Soluções "gerais" repetitiveis, para resolverem problemas comuns.

Cristopher Alexander, 1977

Um padrão descreve uma solução comprovada para um problema recorrente no design

Gang of Four, 1994

Cataloga e explica padrões comuns para resolver problemas de software orientado a objetos.

E como ninguém conhece esse livro?

O mesmo livro com outra capa

Sim, é um livro de arquitetura e urbanismo

E tá tudo bem, afinal,

Design de Software é uma parte da Engenharia de Software

Design Patterns

Exemplos conhecidos


  • Composite
  • Observer
  • Builder

Principles


Representam guidelines de alto nível ou boas práticas para considerar ao projetar a arquitetura do software.

Principles


do Latim, Principium

Começo/Inicio (Fundamento, Base)

Um conjunto de regras, diretrizes e considerações de design que formam a base de qualquer produto.

Design Principles

Exemplos Fundamentais


  • SOLID
  • DRY
  • SoC

Porque comparar os 2? Se são diferentes dos iguais










APLICABILIDADE

CONCEITO


Principles Guias para tomar decisões de design.
Patterns Soluções prontas para problemas recorrentes.

Abordagem


Principles Guias para tomar decisões de design.
Patterns Soluções prontas para problemas recorrentes.

Flexibilidade


Principles Guias para tomar decisões de design.
Patterns Soluções prontas para problemas recorrentes.

Há um 🐘 elefante
na Sala


bora Feitoza, quero ver códigos


Temos um problema: Criar um sistema de venda de ingressos


AQUI TEM CORAGEM

Arquitetura baseada em camadas é um nome melhor pra definir isso

Temos outro problema: Criar um esquema de dar descontos nos ingressos do evento


O que usamos ali?
Pattern ou Principle?

E qual?

SOLID


Open/Closed Principle

Podemos simplesmente criar outro tipo de desconto sem afetar as classes existentes


Outro problema: Gravar logs


O que foi isso aqui?

Abstract Factory


Creational Pattern

E com isso a gente vê o quanto essa Teoria é Prática


Mas cuidado, pra não matar uma formiga com uma bazuca


E é isso


5 - CONCLUSÃO


  • Pilares da Eng de Software
  • Design
  • Diferença Patterns/Principles
  • Aplicação Prática

Como dizia minha ex:
TERMINAMOS

Referências

DÚVIDAS?

Valeu o Boi, valeu o Vaqueiro


@alessandro_feitoza
https://linkedin.com/in/AlessandroFeitoza
slides.feitoza.tec.br