1. Desenho de Software (Padrões de Projeto)
Objetivo
Esta entrega aplica padrões de projeto ao Portal de Notícias Burburinho para solucionar problemas recorrentes de organização, comunicação e evolução do código. Cada padrão deve ser apresentado em um contexto do sistema, representado em UML, implementado em código e demonstrado em execução.
Além de apresentar o resultado, a documentação registra as decisões da equipe, as contribuições individuais, as referências utilizadas e o senso crítico sobre o uso de inteligência artificial generativa.
Organização dos subgrupos
| Subequipe | Categoria de padrões | Padrões ou foco definido | Entrega mínima |
|---|---|---|---|
| 01 | GoFs criacionais | Um padrão criacional aplicado ao portal | Contexto, UML, código, testes e vídeo em execução |
| 02 | GoFs comportamentais | State combinado com Chain of Responsibility, Observer e Memento | Contexto, UML, código, testes e vídeo de cada padrão |
| 03 | GoFs estruturais | Decorator aplicado à personalização comemorativa, identidade visual e destaques de notícias na Home | Contexto, UML, código, testes e vídeo em execução |
Ciclo de aplicação dos padrões
Cada padrão é analisado do problema até a validação da solução:
Problema do domínio
↓
Escolha e justificativa do padrão
↓
Modelagem em UML
↓
Implementação e testes
↓
Execução em vídeo
↓
Referências, versionamento e senso crítico
O padrão não é tratado como uma solução isolada ou como uma receita de código. A escolha precisa ser justificada pelo problema do Burburinho, e a implementação deve permitir verificar a correspondência entre o contexto, o diagrama, o código e o comportamento observado.
Padrões trabalhados
GoFs criacionais
Os padrões criacionais apoiam a criação de objetos e a configuração de instâncias, reduzindo o acoplamento entre o cliente e as classes concretas. Na Subequipe 01, cada integrante aplicou um padrão diferente a uma necessidade de criação presente no portal:
- Builder: monta a página de notícia passo a passo a partir de uma mesma estrutura base (título, subtítulo, categoria, capa, autor e blocos de conteúdo). O
NoticiaDirectorcoordena a montagem, enquanto os builders concretos (NoticiaDestaqueBuilder,NoticiaCompactaBuildereNoticiaMistaBuilder) produzem layouts diferentes, como capa grande em destaque, imagens pequenas ao lado do texto ou título e subtítulo escritos sobre a capa. - Singleton: garante uma única instância de
RepositorioNoticias, acessada porgetInstancia(). Assim, a página inicial, a página de categoria e os destaques consultam os mesmos dados, evitando cópias inconsistentes ou notícias duplicadas. - Abstract Factory: cria famílias coerentes de configurações para comunidades (tema visual, política de moderação e widget padrão). O
CriadorDeComunidadeutiliza apenas aComunidadeFactorye os produtos abstratos, enquanto as fábricas concretas de Tecnologia, Esportes, Cultura e Política garantem que peças de categorias diferentes não sejam misturadas.
Os padrões também se complementam: a notícia montada pelo Builder é publicada no repositório único mantido pelo Singleton, por intermédio da Redacao. Todas as soluções foram implementadas em JavaScript, executadas no navegador seguindo o protótipo do Figma e demonstradas em vídeo. O detalhamento dos diagramas, da análise crítica dos rascunhos gerados por IA e das contribuições está disponível no Relatório da Subequipe 01.
GoFs comportamentais
Os padrões comportamentais organizam a comunicação entre objetos e a distribuição de responsabilidades:
- State combinado com Chain of Responsibility: representa mudanças no ciclo de vida de uma publicação e encaminha a análise para os responsáveis adequados.
- Observer: permite notificar interessados quando ocorre uma alteração relevante, como a publicação de uma notícia ou a mudança de seu status.
- Memento: preserva estados anteriores para possibilitar a recuperação de uma versão de uma publicação sem expor os detalhes internos do objeto.
Esses padrões estão documentados no relatório da Subequipe 02, com modelagem, implementação, testes e análise crítica do uso de IA.
GoFs estruturais
Os padrões estruturais organizam a composição de classes e objetos, permitindo ampliar funcionalidades sem modificar diretamente os componentes existentes. A Subequipe 03 aplicou o padrão Decorator à Home do portal Burburinho, com o objetivo de acrescentar personalizações visuais e mecanismos de destaque de notícias, preservando a estrutura original da página.
A implementação foi desenvolvida de maneira evolutiva e incremental, contemplando três frentes:
- Personalização comemorativa da Home: aplicação de temas de Natal, Halloween e Dia do Estudante, utilizando Decorators responsáveis por paletas de cores, banners, textos, enfeites e animações.
- Adaptação da identidade visual: incorporação de logos SVG específicas para cada data comemorativa aos Decorators de tema (
Tema*Decorator), permitindo substituir dinamicamente a identidade visual padrão do portal. - Destaque de notícias: implementação de
DestaqueComemorativoDecorator, responsável por inserir notícias relacionadas à data selecionada no início da listagem, eDestaqueInteresseUsuarioDecorator, que identifica e destaca notícias compatíveis com os interesses configurados do usuário.
As funcionalidades são combinadas por meio de uma cadeia de Decorators que compartilham o contrato renderizar(). Dessa forma, os destaques podem ser utilizados individualmente ou em conjunto com as personalizações comemorativas, sem exigir a criação de diferentes versões da Home.
A solução integrada foi documentada por meio de diagrama UML, implementação em JavaScript, testes automatizados e demonstração em vídeo. O detalhamento das decisões arquiteturais, das contribuições e da análise crítica do uso de IA generativa está disponível no Relatório da Subequipe 03.
Relação entre os artefatos
Os artefatos da entrega se complementam em diferentes níveis:
| Artefato | Pergunta respondida |
|---|---|
| Contexto | Qual problema do Burburinho precisa ser resolvido? |
| UML | Quais papéis, relações e interações formam a solução? |
| Código | Como a solução foi implementada? |
| Testes | O comportamento esperado pode ser verificado? |
| Vídeo | O padrão funciona em uma execução observável? |
| Referências e senso crítico | Por que essa solução foi escolhida e quais são seus limites? |
Rastreabilidade
| Problema ou funcionalidade | Padrão relacionado | Evidências |
|---|---|---|
| Criar objetos sem acoplar o cliente a classes concretas | GoF criacional | Relatório da Subequipe 01 |
| Encaminhar uma publicação para etapas de análise | Chain of Responsibility | Relatório da Subequipe 02 · Demonstração Next.js |
| Representar o ciclo de vida e as transições de uma publicação | State | Relatório da Subequipe 02 · Demonstração Next.js |
| Notificar usuários ou serviços sobre mudanças | Observer | Relatório da Subequipe 02 · Demonstração Observer + Template Method · vídeo |
| Recuperar uma versão anterior de uma publicação | Memento | Relatório da Subequipe 02 · demonstração executável · vídeo |
| Acrescentar personalizações comemorativas, identidade visual temática e destaques de notícias à Home sem modificar a página base | Decorator | Relatório da Subequipe 03 |
Os links de código, vídeos, diagramas, atas e commits devem ser acrescentados nos relatórios à medida que cada evidência for produzida. A descrição do padrão, sozinha, não substitui a comprovação da implementação.
Metodologia geral
O trabalho foi dividido por categorias de padrões. Cada integrante estudou um problema, propôs uma solução e produziu os artefatos correspondentes. As propostas foram discutidas e revisadas em equipe para verificar se o padrão escolhido era adequado ao contexto, se a UML representava o código e se a execução demonstrava o comportamento descrito.
Na consolidação, a equipe deve conferir:
- se o problema poderia ser resolvido sem o padrão ou se ele realmente reduz um acoplamento ou uma responsabilidade;
- se os nomes e papéis da UML aparecem de forma coerente na implementação;
- se os testes cobrem as transições, notificações, restaurações ou criações relevantes;
- se o vídeo apresenta o padrão em execução, e não apenas o código estático;
- se cada contribuição possui um registro verificável.
Senso crítico e uso de ferramentas
A inteligência artificial generativa foi utilizada como apoio para compreender os padrões, explorar alternativas, produzir rascunhos de UML e código e revisar explicações. As sugestões geradas não foram consideradas soluções finais: a equipe precisou confrontá-las com o domínio do Burburinho, a literatura de padrões e a execução real do código.
O uso de IA também apresentou riscos. Um rascunho pode aplicar um padrão apenas por semelhança superficial, criar classes desnecessárias ou omitir responsabilidades importantes. Por isso, a validação deve considerar o problema original, a notação UML, os testes e o comportamento observado. Os relatórios individuais registram as lições aprendidas e as correções feitas em cada foco.
Relatórios e participações
- Relatório da Subequipe 01 — GoFs criacionais
- Relatório da Subequipe 02 — GoFs comportamentais
- Relatório da Subequipe 03 — GoFs estruturais
- Participações
- Iniciativas extras