57
Definir classe não é programar com orientação a objetos! Hélio Costa e Silva (@hlegius)

Definir classe não é programar com orientação a objetos

Embed Size (px)

Citation preview

Definir classe não é programar com orientação a objetos!

Hélio Costa e Silva (@hlegius)

Oh oh! Eu já sei o que é!

“Getters” e “Setters” burros

$ make clean

Software aos pedaços

necessidade

UI

APIs

Recursosexternos

DB

Para pensar em orientação a objetos, esqueça tudo que não faz parte da

necessidade de negócio do software!

Oh oh! Eu já sei o que é!

Dados + comportamento

• Criar usuário;• Adicionar endereço ao usuário;• Adicionar telefone, contato ao usuário;• …

Como invalidar um objeto

“Produto precisará ter nome e custo. Descrição e imagensserão úteis também!”

Trecho de um escopo qualquer

Como invalidar um objeto

“Produto precisará ter nome e preço. Descrição e imagensserão úteis também!”

Trecho de um escopo qualquer

Consigo criar um objeto semos itens obrigatórios !

O objeto entrou em estado inválido!

Como NÃO invalidar um objeto

“Produto precisará ter nome e preço. Descrição e imagensserão úteis também!”

Trecho de um escopo qualquer

Ciclo de vida de um objeto

Nasce

Consulta

AlteraConsulta

Morre

n vezes

Criando um objeto

Consultar um objeto

O objeto é pego em uma coleção!

O objeto é pego em uma coleção!

Esqueça linha

O objeto é pego em uma coleção!

Esqueça linha

Esqueça coluna

Não importa aonde ele foi salvo!

Alterar um objeto

Deletar um objeto

unset(), garbage collector, …

E quando eu modifico no meio de persistência ?

A persistência é um necessidade de infraestrutura

Horas depois…

Edsger W. Dijkstra(1930-2002)

Separation of Concerns (SoC)

Negócio - domínio Pivô – Domínio <-> Infraestrutura

Separando interesses

Objeto em sociedade

Cada tipo de objeto tem seus limitese responsabilidades!

Entidade

Entidade é o objeto que possuiatributos que o permita ser

individualizado em seu domínio

Factory code: 1206af38c27

Factory code: a64c1d3913

Ciclo de vida dos objetos

Nasce

Consulta

AlteraConsulta

Morre

Nasce

Consulta

AlteraConsulta

Morre

Product Category

Eles estabeleceram uma relação de agregação!

Value Object

Value Object!=

Data Transfer Object (DTO)

Single Responsibility Principle(SRP)

Robert C. Martin (@unclebob)

Cada parte deve ter SOMENTE umaresponsabilidade!

Por que não um:

?

Pois trata-se de uma composição!

Product

Image

CategoryShoppingCart

X

Ciclo de vida dos objetos

Nasce

Consulta

AlteraConsulta

Morre

Product

Image

O ciclo de vida de Image depende de Product!

Road to hell

Google it: S.O.L.I.D design principles

Evitar as más práticas!

OH NOES!

Google it: c2.com God Class

Foco em orientação a objetos NÃO em design patterns

Strategy

Observer

Null Object

Template View

Front Controller

Unit of Work

Query Object

Composite

Chain of Responsibility

Mediator

Abstract Factory

Decorator

Repository

Service Layer

Type Object

Selfish Class

Active Record

Data Mapper

Adapter

Plugin

[email protected]

Obrigado!

Programador PHP

http://programe.me

@hlegius

http://github.com/hlegius

[email protected]

Slides http://slideshare.net/hlegius/Avalie http://joind.in/4454