Algumas pessoas que fazem código, acham melhor entregar rápido do que entregar bem
.header {
background-color: #3498db;
color: #ffffff;
}
.navbar {
background: #3498db;
border-bottom: 2px solid #3498db;
}
.button-primary {
background-color: #3498db;
color: #fff;
}
.footer {
background: #3498db;
color: #ffffff;
}
:root {
--primary-color: #3498db;
--text-light: #ffffff;
}
.header {
background-color: var(--primary-color);
color: var(--text-light);
}
.navbar {
background: var(--primary-color);
border-bottom: 2px solid var(--primary-color);
}
.button-primary {
background-color: var(--primary-color);
color: var(--text-light);
}
.footer {
background: var(--primary-color);
color: var(--text-light);
}
Acabamos de aplicar o DRY
Um Design Principledo Latim, designare
de- (de dentro, para fora)
signare- ( signum, indicar algo, marcar)
"Designar, Determinar"
Mas qual é o momento de "planejar e estruturar"?
No "inicio" do projetoPeguemos este exemplo...
<html>
<body>
<h1 style="color: red; text-align:center;">
Bem-vindo
</h1>
<button
onclick="alert('Olá!')"
style="background:blue;color:white;"
>
Clique aqui
</button>
</body>
</html>
<html>
<head>
</head>
<body>
Bem-vindo
<button
class="btn-primary"
data-id="btn"
>
</body>
</html>
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
Então poderiamos dizer que design de software se divide nisso?
O melhor seria isso
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
Design Patterns
Principles
Representam guidelines de alto nível ou boas práticas para considerar ao projetar a arquitetura do software.
do Latim, Principium
Começo/Inicio (Fundamento, Base)
Design Principles
Porque comparar os 2? Se são diferentes dos iguais
| Principles | Guias para tomar decisões de design. |
|---|---|
| Patterns | Soluções prontas para problemas recorrentes. |
| Principles | Filosofia e comportamento do código. |
|---|---|
| Patterns | Implementação Prática. |
| Principles | São aplicáveis em qualquer tipo de código. |
|---|---|
| Patterns | Podem ser usados em contextos especificos. |
Temos um problema: Criar um sistema de venda de ingressos
AQUI TEM CORAGEM
Temos outro problema: Criar um esquema de dar descontos nos ingressos do evento
O que usamos ali?
Pattern ou Principle?
E qual?
Strategy
Podemos simplesmente criar outro tipo de desconto sem afetar as classes existentes
Outro problema: Gravar logs
class Logger {
log(message, level = "INFO") {
const timestamp = new Date().toISOString();
const formattedMessage = `[${level}] ${timestamp} - ${message}`;
console.log(formattedMessage);
}
}
const logger = new Logger();
logger.log("Usuário logado", "INFO");
logger.log("Erro de conexão", "ERROR");
Código com várias responsabilidades: formatação, nível e saída.
class MessageFormatter {
format(message, level = "INFO") {
const timestamp = new Date().toISOString();
return `[${level}] ${timestamp} - ${message}`;
}
}
class ConsoleWriter {
write(message) {
console.log(message);
}
}
class Logger {
constructor(formatter, writer) {
this.formatter = formatter;
this.writer = writer;
}
log(message, level = "INFO") {
const formatted = this.formatter.format(message, level);
this.writer.write(formatted);
}
}
const formatter = new MessageFormatter();
const writer = new ConsoleWriter();
const logger = new Logger(formatter, writer);
logger.log("Usuário logado", "INFO");
logger.log("Erro de conexão", "ERROR");
Cada classe tem uma única responsabilidade, facilitando manutenção e extensão.
O que foi isso aqui?
SOLID
E com isso a gente vê o quanto essa Teoria é Prática
Como dizia minha ex:
TERMINAMOS
DÚVIDAS?