• Stars
    star
    207
  • Rank 189,769 (Top 4 %)
  • Language
  • License
    Other
  • Created over 4 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Apostila do curso Práticas de Design e Arquitetura de Código da Caelum. https://www.caelum.com.br/curso-design-arquitetura-de-aplicacoes-java

Apostila do curso Práticas de Design e Arquitetura de Código para Aplicações Java da Caelum

Para mais informações sobre o curso, acesse: https://www.caelum.com.br/curso-design-arquitetura-de-aplicacoes-java

Licença

Esta obra está licenciada com uma Licença Creative Commons Atribuição-NãoComercial-SemDerivações 4.0 Internacional.

Ementa

Para que serve OO?

  • Modelagem e Dependências
  • Os princípios SOLID
  • Os princípios de coesão e acoplamento de módulos
  • Para saber mais: A história dos princípios SOLID

Conhecendo o Cotuba

  • Exercício: gerando um ebook
  • Exercício: abrindo o código do Cotuba no Eclipse
  • Exercício: gerando um ebook pelo Eclipse
  • Um pouco sobre a implementação do Cotuba
  • Para saber mais: a sintaxe do Markdown

Single Responsibility Principle: classes coesas

  • Uma classe com muitos motivos para ser modificada
  • O Princípio da Responsabilidade Única
  • Responsabilidades, Coesão e SRP no Cotuba
  • Exercício: uma classe para ler as opções de linha de comando
  • Exercício: uma classe para gerar PDF
  • Exercício: uma classe para gerar EPUB
  • Refatorar é bom pra aprender OO
  • Não se repita
  • Duplicação no Cotuba
  • Exercício: extraindo duplicação para uma classe renderizadora de Markdown
  • Um domain model para o Cotuba
  • Exercício: um domain model simples
  • Exercício: usando o domain model no renderizador
  • Exercício: usando o domain model na classe principal e nos geradores de ebook
  • MVC: um molde de distribuição de responsabilidades
  • MVC pra linha de comando?
  • Exercício: separando a Aplicação do Controller no Cotuba
  • Exercício: organizando os pacotes
  • Responsabilidades no nível de métodos
  • Exercício opcional: métodos responsáveis
  • Para saber mais: GRASP
  • Para saber mais: Design Simples

Dependency Inversion Principle: dependências gerenciadas

  • Uma classe com muitas dependências
  • Acoplamento, Estabilidade e Volatilidade
  • Abstrações e inversão das dependências
  • Regras de Negócio x Detalhes
  • Código de alto nível e baixo nível
  • O Princípio da Inversão de Dependências
  • Toda interface é uma abstração de alto nível?
  • DIP e a Arquitetura em 3 camadas
  • Regra da Dependência
  • Acoplamento, Volatilidade, Abstrações e DIP no Cotuba
  • Exercício: invertendo as dependências da classe Cotuba
  • Design Pattern: Factory, gerenciando dependências ao criar objetos
  • Exercício: usando Factory para as dependências da classe Cotuba
  • Nomeando as implementações
  • Exercício: melhorando o nome das implementações
  • Abstrações mais perto de quem as usa
  • Exercício: movendo as abstrações do Cotuba
  • Uma classe para os parâmetros
  • Exercício: simplificando parâmetros
  • Ih! Ferimos o DIP...
  • Exercício: mais uma interface para inverter as dependências

Open/Closed Principle: objetos flexíveis

  • Em busca da abstração perfeita
  • Flexibilidade
  • Design Pattern: Command, abstraindo operações
  • Variações Protegidas
  • O Princípio Aberto/Fechado
  • OCP, boas abstrações e o Cotuba
  • Exercício: uma abstração melhor para a geração de ebooks
  • Exercício: removendo interfaces desnecessárias
  • Design Pattern: Strategy, diferentes maneiras de fazer a mesma coisa
  • Exercício: simplificando os nomes das implementações
  • Uma Factory inteligente
  • Exercício: implementando uma Factory inteligente
  • Polimorfismo
  • A campanha Anti-IF
  • Exercício: Até mais, condicionais!

Temas e Plugins

  • Aplicando CSS no ebook
  • Exercício: uma classe para aplicar temas
  • Explorando o design: responsabilidades e dependências
  • Exercício: aplicando o tema
  • A necessidade de plugins
  • Pontos de extensão por meio de interfaces
  • Exercício: um plugin para o Cotuba
  • Exercício: uma implementação do plugin
  • Ligando os pontos (de extensão) com a Service Loader API
  • Exercício: ligando a SPI com o Service Provider
  • Exercício: carregando o service provider
  • Exercício: testando o plugin de tema
  • Para saber mais: Alguns usos da Service Loader API na plataforma Java

Um plugin de estatísticas

  • Um plugin menos específico
  • Exercício: mais um plugin no Cotuba
  • Um problema no plugin de tema
  • Exercício: corrigindo o problema do tema
  • Um plugin para calcular estatísticas do ebook
  • Exercício: iniciando a implementação do plugin de estatísticas
  • Exercício: testando o plugin de estatísticas

Liskov Substitution Principle: herança do jeito certo

  • Continuando a implementação das estatísticas
  • Exercício: tentando contar as palavras
  • Contando palavras
  • Exercício: implementando a contagem de palavras
  • Palavras em ordem alfabética
  • Exercício: ordenando as palavras
  • Herdando inutilidades
  • OO não é só herança
  • O Princípio da Substituição de Liskov
  • Favorecendo composição à herança
  • Exercício: composição na contagem de palavras
  • A forte intimidade entre uma (classe) filha e sua mãe
  • Quando usar herança?
  • Para saber mais: o uso incorreto de herança na plataforma Java
  • Qual a necessidade de um método se não há nada pra ser feito?

Interface Segregation Principle: clientes separados, interfaces separadas

  • Uma interface, dois usos
  • O Princípio da Segregação de Interfaces
  • Exercício: uma interface separada para temas
  • Exercício: uma interface separada para a finalização da geração do ebook
  • Separando classes, não apenas interfaces
  • Interfaces específicas para o cliente no Cotuba
  • Exercício: protegendo o domain model com interfaces
  • Desafio (opcional): generalizando o plugin de tema

Um pouco de imutabilidade e encapsulamento

  • Violar o ISP ou o DIP?
  • Classes sem setters
  • Em direção à imutabilidade
  • Imutabilidade
  • Exercício: voltando atrás na segregação de interfaces
  • Exercício: um domain model imutável
  • Usando objetos imutáveis
  • Design Pattern: Builder
  • Exercício: um builder para os capítulos
  • Código invejoso x Código tímido
  • Encapsulamento
  • A Lei de Deméter e o lema "Diga, não pergunte"
  • Maximizando o uso do this
  • Quebra de encapsulamento no plugin de estatísticas
  • Design Pattern: Iterator
  • Iteração externa x iteração interna
  • Exercício: iteração interna para favorecer o encapsulamento
  • MVC ferido
  • Um objeto para impressão
  • Uma abstração de uma ação com o Command Pattern
  • Uma abordagem mais funcional
  • Usando uma interface funcional pré-definida
  • Exercício opcional: respeitando o MVC com uma abordagem funcional

Princípios de Coesão e Acoplamento de Módulos

  • O que são módulos?
  • JARs
  • Porque modularizar?
  • O que é reuso?
  • Princípios de coesão de módulos
  • O Princípio da Equivalência entre Entrega e Reuso
  • O Princípio do Agrupamento Comum
  • O Princípio do Reuso Comum
  • A tensão entre os princípios de coesão de módulos
  • Módulos, componentes ou pacotes?
  • Modularizando o Cotuba
  • Módulos Maven
  • Exercício: criando um projeto Maven multi-módulos
  • Exercício: criando um módulo para a aplicação
  • Exercício: criando um módulo para a linha de comando
  • Princípios de acoplamento de módulos
  • O Princípio das Dependências Acíclicas
  • O Princípio das Dependências Estáveis
  • O Princípio das Abstrações Estáveis
  • Exercício: um módulo para a geração de PDFs
  • Exercício: um módulo para a geração de EPUBs
  • Exercício: quebrando ciclos através de plugins
  • Métrica: instabilidade
  • Métrica: abstratividade

Além da linha de comando

  • Uma interface Web para o Cotuba
  • Exercício: uma UI Web
  • Entendendo o código do Cotuba Web
  • Exercício: implementando o download de ebooks
  • Exercício: preparando para chamar o Cotuba
  • Chamando o Cotuba a partir da Web
  • Quando nosso design não antecipa as mudanças
  • Mudanças inesperadas e design incremental
  • Exercício: mais abstração, mais flexibilidade
  • Exercício: ajustando a linha de comando
  • Exercício: gerando ebooks a partir do Cotuba Web

Arquitetura Hexagonal

  • Por uma arquitetura centrada no domínio
  • Hexágonos (ou Conectores & Adaptadores)
  • Arquitetura Hexagonal no Cotuba
  • Arquitetura de Plugins
  • Barreiras Arquiteturais
  • Clean Architecture
  • Outras arquiteturas semelhantes
  • Exercício: Discussão
  • Para saber mais: Microsserviços e o Monólito Modular

Apêndice: Módulos com o Java Platform Module System (JPMS)

  • A falta de encapsulamento dos módulos no Java
  • Exercício: acessando o que não deveríamos
  • O problema do Classpath
  • JPMS, um sistema de módulos para o Java
  • A JDK modularizada
  • Usando a JDK modularizada com o Classpath
  • Exercício: Instalando o Java 10 com o SDKMAN!
  • Exercício: Configurando o Java 10 no Eclipse
  • Exercício: Atualizando os módulos do Cotuba para o Java 10
  • Erros ao usar o JAXB
  • Exercício: Corrigindo erro de JAXB no Cotuba Web
  • Encapsulando os módulos do Cotuba com o JPMS
  • Módulos automáticos
  • Exercício: Migrando o módulo Cotuba Core para o JPMS
  • Exercício: Migrando o módulo Cotuba CLI para o JPMS
  • Declarando SPIs e Service Providers com JPMS
  • Exercício: Adequando o Service Loader ao JPMS
  • Exercício: migrando os geradores de ebooks para o JPMS
  • O Modulepath
  • Exercício: usando o Modulepath no Cotuba CLI

Apêndice: Injeção de Dependências com Spring

  • Exercício: gerenciando o Cotuba CLI com Spring
  • Exercício: abrindo o módulo Cotuba CLI para Reflection
  • Exercício: gerenciando o Cotuba Core com Spring
  • Exercício: Injetando a classe Cotuba no Cotuba Web

Apêndice: Referências

More Repositories

1

caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro
Java
644
star
2

apostila-microservices-com-spring-cloud

Apostila do curso de Microservices com Spring Cloud da Caelum.
508
star
3

restfulie

CRUD through HTTP is a good step forward to using resources and becoming RESTful. Another step further into it is to make use of hypermedia-based services and the Restfulie gem allows you to do it very quickly.
Ruby
393
star
4

vraptor

Simple Java Web MVC Framework
Java
385
star
5

vraptor4

A web MVC action-based framework, on top of CDI, for fast and maintainable Java development.
Java
350
star
6

mamute

Q&A Engine
Java
337
star
7

agiletickets

Ticket system
Java
119
star
8

apostila-devops

Apostila do curso de DevOps
TSQL
112
star
9

tubaina

Tubaina is a book generator. Given a text written in afc syntax, a markup language, an html or pdf output is generated
HTML
99
star
10

restfulie-java

restfulie implementation in java, with support to vraptor
Java
94
star
11

apostila-java-orientacao-objetos

56
star
12

vraptor-scaffold

VRaptor Scaffold extension to make it easier configuring new projects and plugins
Ruby
55
star
13

alura-funcionalidades

Sugestões e pedidos de novas funcionalidades para a Alura
51
star
14

vraptor-contrib

VRaptor contributions.
42
star
15

arquiteturajava.com.br

Site do Livro de arquitetura usando responsive design e media queries
JavaScript
39
star
16

guj.com.br

source code for Grupo de Usuarios Java
Java
34
star
17

agile-tickets-csharp

csharp version
JavaScript
34
star
18

calopsita

Agile teams project management tool
Java
32
star
19

apostila-csharp-orientacao-objetos

31
star
20

onibus-android

Versão para android, encontre-se melhor no transporte coletivo!
Java
30
star
21

apostila-html-css-javascript

29
star
22

apostila-python-orientacao-a-objetos

28
star
23

agile-workshop-tdd

agile-workshop-tdd
Java
26
star
24

programadorpoliglota

Ruby
25
star
25

caelum-stella-csharp

Versão C# beta da Caelum Stella
C#
24
star
26

restfulie-py

Python port of Restfulie
Python
23
star
27

apostila-java-web

21
star
28

restfulie-net

C# implementation of restfulie
C#
20
star
29

apostila-sql-e-modelagem-com-banco-de-dados

17
star
30

agile-workshop-tdd-csharp

workshop de tdd em c#
C#
17
star
31

vraptor-panettone

A fast, secure, robust, concise and sex-appealing typesafe template engine written in Java
Java
17
star
32

hypertemplate

A hypermedia resource template engine
Ruby
16
star
33

git-reports

this project aims to extract statistics from GitHub commits
Ruby
16
star
34

restfulie-javascript

Restfulie's javascript port
JavaScript
15
star
35

vraptor-simplemail

Simple mailer for vraptor
Java
15
star
36

rest-client

Um client rest para web.
Java
15
star
37

apostila-ux-usabilidade-mobile-web

15
star
38

imersaocss

Código das aulas da Imersão CSS 05/2020
14
star
39

tatame

support for dojo sessions
Ruby
13
star
40

onibus-ios

Uma app para facilitar sua vida no transporte coletivo. Por enquanto apenas para busões em SP. Contribuições são bem vindas!
Objective-C
13
star
41

vraptor-test

A test plugin for vraptor
Java
12
star
42

vraptor-console

Java
12
star
43

cotuba

Gerador de ebooks implementado em Java. É usado no curso FJ-38.
Java
11
star
44

tubaina2

Shell
10
star
45

relata

Helps poking around with relationships when using ARel
Ruby
9
star
46

FJ-59-android-anvacado

Java
9
star
47

conexaojava

Java
9
star
48

projeto-wd47

HTML
9
star
49

fj22-ingressos

Java
9
star
50

javafx-lib-contas

Java
8
star
51

restfulie-python

Python port of Restfulie
Python
8
star
52

selenium-dsl

A DSL for working with Selenium and Java
Java
8
star
53

restfulie-restbuy

An advanced and integrated store implementation using hypermedia and Restfuli
Ruby
7
star
54

onibus-web

BusaoSP web edition
JavaScript
7
star
55

vraptor-i18n

I18n support for vraptor
Java
7
star
56

vraptor-jpa

Java
7
star
57

calopsita-monografia

6
star
58

vraptor-environment

A environment reader for vraptor
Java
6
star
59

projeto-js45

Arquivos base para o curso JS-45 40hs
CSS
6
star
60

envie

Feature toggle api
Ruby
6
star
61

vraptor-brutauth

Java
6
star
62

restfulie-objectivec

Objective C implementation of Restfulie
Objective-C
6
star
63

vraptor-dash

vraptor dashboard by gui
Java
6
star
64

vraptor-mauth

An auth plugin for vraptor
Java
6
star
65

restfulie-test

Ruby
6
star
66

medie

Media type registry to use on client and servers. A media type registry that allows you to register handlers for marshalling and unmarshalling.
Ruby
6
star
67

caelumpic-server

API Rest do Caelumpic
JavaScript
6
star
68

vraptor-simple-validator

A simple way to use VRaptor validators
Java
5
star
69

vraptor-error-control

Error plugin control by email
Java
5
star
70

agile-workshop-tdd-en

JavaScript
5
star
71

vraptor-hibernate

A hibernate plugin for vraptor
Java
5
star
72

arquivos-js46

Repositório com os arquivos do curso
JavaScript
5
star
73

vraptor-java8

Java
4
star
74

fj11-contas

Java
4
star
75

restfulie-guide

book on practical rest
Ruby
4
star
76

pm87-agiletickets

Sistema de venda de ingressos usado como exemplo no curso PM-87 da Caelum
Java
4
star
77

jquery-table-me

Easily "tablerize" a table
JavaScript
4
star
78

restfulie-nodejs

JavaScript
4
star
79

pm-75-leiloes

Projeto de leilões para o curso PM75
Java
4
star
80

restfulie-php

php version of restfulie client
PHP
4
star
81

cotuba-modular

Java
3
star
82

vraptor-scala-mydvds

A project using scala and vraptor for a better web development
Java
3
star
83

quarentenadev

JavaScript
3
star
84

panettone-eclipse

A panettone plugin for eclipse
Java
3
star
85

busaosp-android

Java
3
star
86

NET-Selenium-DSL

NET Selenium DSL
C#
3
star
87

vraptor-paperclip

Java
3
star
88

vraptor-future

Future support for vraptor in several ways
Java
3
star
89

vraptor-paginator

Paginator
Java
3
star
90

timemachine

joda time time machine helper
Java
3
star
91

vcontainer

A pico container based implementation of Dependecy Injection to Rails.
Ruby
3
star
92

restbucks-java

restbucks implementation in java, using vraptor and restfulie-vraptor
Java
3
star
93

vraptor-quartzjob

A simple quartz job
Java
3
star
94

rails-and-solid

a little more s.o.l.i.d., a little less responsibilities into one place.
Ruby
3
star
95

jaxrs2-caelum

caelum changes
Java
2
star
96

integra

Java
2
star
97

dynamicRepositoryBuilder

Java
2
star
98

vraptor-routes

Java
2
star
99

cmail-back

JavaScript
2
star
100

otimizador-web

Java
2
star