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
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
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 é 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!=
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