SlideShare uma empresa Scribd logo
1 de 25
Bolovo: Não use por aí 
7Masters OOD 
Palestra de 7 minutos 
29/10/2014
That’s me 
• Priscila Mayumi Sato 
• Twitter: @mayogax 
• Fullstack Software Developer 
• Microsoft MTAC 
• PHPSP + Woman 
• 7 anos de convivencia com .net <3
Vamos começar um projeto 
Como projetos começam
Arquitetura? 
Projeto 
MVC 
Entidades 
(Models) 
BLL 
(Busines 
Layer) 
DLL 
(Data Layer)
Arquitetura? 
Projeto 
MVC 
Entidades 
(Models) 
BLL 
(Busines 
Layer) 
DLL 
(Data Layer)
Simples e fácil 
• O projeto MVC acessa as entidades 
• O projeto MVC acessa a BLL que contem a lógica 
• A BLL acessa as entidades 
• A BLL acessa a DAL para salvar na base de dados 
• A DAL acessa as entidades 
• Arquitetura definida e projeto iniciado em 2 minutos 
• Simples e fácil
Quantos projetos começam assim? 
• Entre no Github e procure por projetos .net (ou java) 
• Quantas vezes você começou numa empresa que o código estava 
assim? 
• Até hoje muitos tutoriais online pregam essa prática como “boa 
prática”
BOLOVO 
Um pouco de história
BOLOVO 
• Em 2007 numa apresentação para o JustJava Paulo Silveira e introduziu 
o conceito de BOLOVO 
• Traduzindo: 
• UsuarioBusinessObject (BO) – nossa BLL 
• UsuarioLayerObject (LO) – nosso projeto MVC 
• UsuarioValueObject (VO) – nosso projeto de entidades/models 
• http://blog.caelum.com.br/justjava-2007-arquitetura-e-caelum/
BOLOVO 
• Conceito nasceu na comunidade Java, mas como muitos projetos, 
conceitos e ideias são “importados” para o .net 
• Até hoje existem tutoriais e projetos nascendo em arquitetura 
BOLOVO
BOLOVO - motivos 
• “Esses design patterns faziam muito sentido quando no J2EE os 
entity beans não eram serializáveis, e sim acessados remotamente, 
além de que não existia injeção de dependência.” 
• Paulo Silveira – em 2007 
• Em .net não havia esses motivos 
• A arquitetura BOLOVO foi importada para projetos .net para 
organizar códigos e prover uma estrutura de arquitetura cebola
BOLOVO – design das classes 
• Entidade/Model: 
• Palestra 
• BLL: 
• PalestraBLL 
• DLL: 
• PalestraDLL 
• MVC: 
• PalestraController 
Várias classes irmãs com os mesmos 
nomes e sufixos indicando sua função 
Uníca que realmente necessita ser escrita dessa forma
BOLOVO 
Porque não usar por aí
Problemas antigos
Não há necessidade para BOLOVO hoje 
• “Os programadores mais novos podem não ter sido influenciados 
pelos problemas dos EJBs mas ele ainda foram ensinados à 
programar de uma só maneira: código procedural.” 
• http://blog.fragmental.com.br/2010/01/18/domain-driven-bolovo-passando- 
conhecimento-e-etc/ 
PROCEDURAL!!!
Programação procedural 
• Projeto em BOLOVO faz seu código ser procedural 
• “ Veja, no momento que separamos dados de um lado, e 
comportamento de outro, voltamos a programar de maneira 
procedural. Nesse tipo de arquitetura, é comum vermos imensas 
classes com as regras de negócios repetidas e espalhadas. A 
consequência disso? Um código dificílimo de ser mantido e 
evoluído.” 
• http://blog.caelum.com.br/o-que-e-modelo-anemico-e-por-que-fugir-dele/
Um projeto inteiro de gets e setters 
• Projeto Entidades/Models inteiro de classes só com as propriedades 
• Classes anémicas != orientação a objetos 
• Classes que nem são testadas (só propriedades) 
• Sobre criar classes só com gets e setters: 
http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/
Baixa testabilidade 
• Projeto entidades/models não é testado 
• Para testar BLL é preciso vários mocks de DAL (não necessáriamente 
uma coisa ruim, mas para você ver como há forte dependencia) 
• Métodos na BLL gigantes e dificeis de serem testados (afinal é preciso 
um mesmo métodos ter testes de lógica e de dados, tudo junto e 
misturado) 
• Uma odisséia para tentar usar TDD e você vai desistir logo no começo
Nada de SOLID  
• Princípio da Responsabilidade Única 
• classes da BLL além de lógica controlam cada aspécto de um model, 
inclusive a inserção na base de dados (as classes como PalestraBLL) 
• Princípio do Aberto-Fechado 
• Ao mudar uma classe possivelmente vai mudar todas as classes irmãs, cada 
inserção de funcionalidades precisa alterar outras classes em seguida 
tornando custoso a adição de novas funcionalidades
Nada de SOLID  
• Princípio de Substituição de Liskov 
• Não há em projetos BOLOVO subtipos 
• Se houver herança um subtipo de BLL, por exemplo, não pode ser 
substituidas por sua classe base 
• Princípio da Segregação de Interfaces 
• Interfaces para BLL nunca conseguem ter somente o que a classe precisa 
• Se possuem você provavelmente está colocando lógica nenhuma 
• Princípio da Inversão de Dependência 
• Classes da BLL dependem de implementações concretas de DAL e de 
Entidades/Models
Resumo da opera 
entãaaoooo
Resumo da opera 
• BOLOVO cai bem... Se você programa em java em 2004 
• Não é boa prática 
• Dica: o projeto já nasce legado 
• Não há necessidade de programadores .net continuarem nessa 
estrutura hoje, em 2014!!
O que eu faço então? 
• Sugestão: aprenda DDD 
• Aprenda TDD (se soubesse não estaria usando BOLOVO) 
• Fuja da preguiça – se for programar em linguagem orientada a 
objetos não há pra que ser procedural 
• Evolua e não pare no tempo (lembre: BOLOVO já era ruim em 
2007)
Dúvidas? 
Criticas, sugestões, idéias, convites para jogar Magic?
Obrigada :D 
@MayogaX

Mais conteúdo relacionado

Mais procurados

Distúrbios gastrointestinais funcionais roma iii
Distúrbios gastrointestinais funcionais   roma iiiDistúrbios gastrointestinais funcionais   roma iii
Distúrbios gastrointestinais funcionais roma iiif53
 
Esclerose múltipla slides
Esclerose múltipla slidesEsclerose múltipla slides
Esclerose múltipla slideskmillaalves
 
SíNdrome De Marfan
SíNdrome De MarfanSíNdrome De Marfan
SíNdrome De MarfanLucas
 
Esclerose lateral amiotrófica pronto [2525]
Esclerose lateral amiotrófica pronto [2525]Esclerose lateral amiotrófica pronto [2525]
Esclerose lateral amiotrófica pronto [2525]Gilmar Roberto Batista
 
8 coagul..
8  coagul..8  coagul..
8 coagul..LAC
 
Correçao computador omputaçao segunda atividade
Correçao computador omputaçao segunda atividadeCorreçao computador omputaçao segunda atividade
Correçao computador omputaçao segunda atividadegastaovalle
 
Pneumopatias intersticiais conceitos iniciais
Pneumopatias intersticiais  conceitos iniciaisPneumopatias intersticiais  conceitos iniciais
Pneumopatias intersticiais conceitos iniciaisFlávia Salame
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoLuiz Arthur
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionaisAbnel Junior
 
Esclerose lateral amiotrófica (ela)
Esclerose lateral amiotrófica (ela)Esclerose lateral amiotrófica (ela)
Esclerose lateral amiotrófica (ela)Margarete Sgarabotto
 
Aula 04 arquitetura de computadores
Aula 04   arquitetura de computadoresAula 04   arquitetura de computadores
Aula 04 arquitetura de computadoresDaniel Moura
 
Aula 5a - Sistemas Operacionais
Aula 5a - Sistemas OperacionaisAula 5a - Sistemas Operacionais
Aula 5a - Sistemas OperacionaisJocelma Rios
 

Mais procurados (20)

Distúrbios gastrointestinais funcionais roma iii
Distúrbios gastrointestinais funcionais   roma iiiDistúrbios gastrointestinais funcionais   roma iii
Distúrbios gastrointestinais funcionais roma iii
 
Esclerose múltipla slides
Esclerose múltipla slidesEsclerose múltipla slides
Esclerose múltipla slides
 
Esclerose multipla
Esclerose multiplaEsclerose multipla
Esclerose multipla
 
Ela- Esclerose Lateral Amiotrófica
Ela- Esclerose Lateral Amiotrófica Ela- Esclerose Lateral Amiotrófica
Ela- Esclerose Lateral Amiotrófica
 
SíNdrome De Marfan
SíNdrome De MarfanSíNdrome De Marfan
SíNdrome De Marfan
 
Mulheres na tecnologia
Mulheres na tecnologiaMulheres na tecnologia
Mulheres na tecnologia
 
Branding: Apple
Branding: AppleBranding: Apple
Branding: Apple
 
Esclerose lateral amiotrófica pronto [2525]
Esclerose lateral amiotrófica pronto [2525]Esclerose lateral amiotrófica pronto [2525]
Esclerose lateral amiotrófica pronto [2525]
 
8 coagul..
8  coagul..8  coagul..
8 coagul..
 
Esclerose múltipla
Esclerose múltiplaEsclerose múltipla
Esclerose múltipla
 
Cidades inteligentes
Cidades inteligentesCidades inteligentes
Cidades inteligentes
 
Alcoolica fetal
Alcoolica fetalAlcoolica fetal
Alcoolica fetal
 
Correçao computador omputaçao segunda atividade
Correçao computador omputaçao segunda atividadeCorreçao computador omputaçao segunda atividade
Correçao computador omputaçao segunda atividade
 
Pneumopatias intersticiais conceitos iniciais
Pneumopatias intersticiais  conceitos iniciaisPneumopatias intersticiais  conceitos iniciais
Pneumopatias intersticiais conceitos iniciais
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - Introducao
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Processamento paralelo
Processamento paraleloProcessamento paralelo
Processamento paralelo
 
Esclerose lateral amiotrófica (ela)
Esclerose lateral amiotrófica (ela)Esclerose lateral amiotrófica (ela)
Esclerose lateral amiotrófica (ela)
 
Aula 04 arquitetura de computadores
Aula 04   arquitetura de computadoresAula 04   arquitetura de computadores
Aula 04 arquitetura de computadores
 
Aula 5a - Sistemas Operacionais
Aula 5a - Sistemas OperacionaisAula 5a - Sistemas Operacionais
Aula 5a - Sistemas Operacionais
 

Destaque

Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven DesignDaniel Cukier
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-DesignWende Mendes
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesJoao Paulo Oliveira dos Santos
 
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoJustjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoPaulo Silveira
 
Better Functional Design through TDD
Better Functional Design through TDDBetter Functional Design through TDD
Better Functional Design through TDDPhil Calçado
 
Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACICcaironoleto
 
OOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovOOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovPriscila Mayumi
 
1ª madrugada de testes net coders coding dojo
1ª madrugada de testes net coders   coding dojo1ª madrugada de testes net coders   coding dojo
1ª madrugada de testes net coders coding dojoPriscila Mayumi
 
OOD - Princípio da Inversão de Dependência
OOD - Princípio da Inversão de DependênciaOOD - Princípio da Inversão de Dependência
OOD - Princípio da Inversão de DependênciaPriscila Mayumi
 
Scripts Entity Framework
Scripts Entity FrameworkScripts Entity Framework
Scripts Entity FrameworkPriscila Mayumi
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Christiano Anderson
 
Bounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasBounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasYan Justino
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do softwareYan Justino
 

Destaque (20)

Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Microsoft MTACs
Microsoft MTACsMicrosoft MTACs
Microsoft MTACs
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrões
 
Domain driven design - Visão Geral
Domain driven design - Visão GeralDomain driven design - Visão Geral
Domain driven design - Visão Geral
 
DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip CalçadoJustjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
Justjava 2007 Arquitetura Java EE Paulo Silveira, Phillip Calçado
 
Better Functional Design through TDD
Better Functional Design through TDDBetter Functional Design through TDD
Better Functional Design through TDD
 
Introdução a nosql - II SACIC
Introdução a nosql - II SACICIntrodução a nosql - II SACIC
Introdução a nosql - II SACIC
 
OOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de LiskovOOD - Princípio da Substituição de Liskov
OOD - Princípio da Substituição de Liskov
 
Entity framework 7
Entity framework 7Entity framework 7
Entity framework 7
 
1ª madrugada de testes net coders coding dojo
1ª madrugada de testes net coders   coding dojo1ª madrugada de testes net coders   coding dojo
1ª madrugada de testes net coders coding dojo
 
OOD - Princípio da Inversão de Dependência
OOD - Princípio da Inversão de DependênciaOOD - Princípio da Inversão de Dependência
OOD - Princípio da Inversão de Dependência
 
Scripts Entity Framework
Scripts Entity FrameworkScripts Entity Framework
Scripts Entity Framework
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
Iniciando com DDD
Iniciando com DDDIniciando com DDD
Iniciando com DDD
 
Bounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasBounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadas
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
 

Semelhante a Por que evitar BOLOVO em projetos .NET

Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesC. Augusto Proiete
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileWsdevs Desenvolvedores
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Carlos Eduardo
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHHugo Ferreira
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Elaine Cecília Gatto
 
Microservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosMicroservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosRyan Padilha
 

Semelhante a Por que evitar BOLOVO em projetos .NET (20)

Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
Entity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidadesEntity Framework 4, Novas funcionalidades
Entity Framework 4, Novas funcionalidades
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções MobileMwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
Mwds01 - Introdução a Arquitetura e Projeto de Soluções Mobile
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Padrões de Projeto Web e o MVC
Padrões de Projeto Web e o MVCPadrões de Projeto Web e o MVC
Padrões de Projeto Web e o MVC
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Arquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BHArquitetura Limpa @ 32º CocoaTalks BH
Arquitetura Limpa @ 32º CocoaTalks BH
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1Programação Orientada a Objetos parte 1
Programação Orientada a Objetos parte 1
 
Microservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e DesafiosMicroservices - Arquitetura, Ecossistema e Desafios
Microservices - Arquitetura, Ecossistema e Desafios
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 

Mais de Priscila Mayumi

Do 0 a estar online no Google App Engine
Do 0 a estar online no Google App EngineDo 0 a estar online no Google App Engine
Do 0 a estar online no Google App EnginePriscila Mayumi
 
OOD - Princípio Open/Closed
OOD - Princípio Open/ClosedOOD - Princípio Open/Closed
OOD - Princípio Open/ClosedPriscila Mayumi
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaPriscila Mayumi
 
Sistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingSistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingPriscila Mayumi
 
Oportunidades para desenvolvedores
Oportunidades para desenvolvedoresOportunidades para desenvolvedores
Oportunidades para desenvolvedoresPriscila Mayumi
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafosPriscila Mayumi
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrationsPriscila Mayumi
 
Trabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity FrameworkTrabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity FrameworkPriscila Mayumi
 
O Mágico Mundo do Entity Framework
O Mágico Mundo do Entity FrameworkO Mágico Mundo do Entity Framework
O Mágico Mundo do Entity FrameworkPriscila Mayumi
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 

Mais de Priscila Mayumi (16)

Do 0 a estar online no Google App Engine
Do 0 a estar online no Google App EngineDo 0 a estar online no Google App Engine
Do 0 a estar online no Google App Engine
 
OOD - Princípio Open/Closed
OOD - Princípio Open/ClosedOOD - Princípio Open/Closed
OOD - Princípio Open/Closed
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade única
 
Sistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingSistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computing
 
Conhecendo o Firefox OS
Conhecendo o Firefox OSConhecendo o Firefox OS
Conhecendo o Firefox OS
 
Oportunidades para desenvolvedores
Oportunidades para desenvolvedoresOportunidades para desenvolvedores
Oportunidades para desenvolvedores
 
PHP no Windows Azure
PHP no Windows AzurePHP no Windows Azure
PHP no Windows Azure
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrations
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
Trabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity FrameworkTrabalhando com banco de dados e Entity Framework
Trabalhando com banco de dados e Entity Framework
 
Ninja migrations
Ninja migrationsNinja migrations
Ninja migrations
 
O Mágico Mundo do Entity Framework
O Mágico Mundo do Entity FrameworkO Mágico Mundo do Entity Framework
O Mágico Mundo do Entity Framework
 
Ruby versus Python
Ruby versus PythonRuby versus Python
Ruby versus Python
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 

Por que evitar BOLOVO em projetos .NET

  • 1. Bolovo: Não use por aí 7Masters OOD Palestra de 7 minutos 29/10/2014
  • 2. That’s me • Priscila Mayumi Sato • Twitter: @mayogax • Fullstack Software Developer • Microsoft MTAC • PHPSP + Woman • 7 anos de convivencia com .net <3
  • 3. Vamos começar um projeto Como projetos começam
  • 4. Arquitetura? Projeto MVC Entidades (Models) BLL (Busines Layer) DLL (Data Layer)
  • 5. Arquitetura? Projeto MVC Entidades (Models) BLL (Busines Layer) DLL (Data Layer)
  • 6. Simples e fácil • O projeto MVC acessa as entidades • O projeto MVC acessa a BLL que contem a lógica • A BLL acessa as entidades • A BLL acessa a DAL para salvar na base de dados • A DAL acessa as entidades • Arquitetura definida e projeto iniciado em 2 minutos • Simples e fácil
  • 7. Quantos projetos começam assim? • Entre no Github e procure por projetos .net (ou java) • Quantas vezes você começou numa empresa que o código estava assim? • Até hoje muitos tutoriais online pregam essa prática como “boa prática”
  • 8. BOLOVO Um pouco de história
  • 9. BOLOVO • Em 2007 numa apresentação para o JustJava Paulo Silveira e introduziu o conceito de BOLOVO • Traduzindo: • UsuarioBusinessObject (BO) – nossa BLL • UsuarioLayerObject (LO) – nosso projeto MVC • UsuarioValueObject (VO) – nosso projeto de entidades/models • http://blog.caelum.com.br/justjava-2007-arquitetura-e-caelum/
  • 10. BOLOVO • Conceito nasceu na comunidade Java, mas como muitos projetos, conceitos e ideias são “importados” para o .net • Até hoje existem tutoriais e projetos nascendo em arquitetura BOLOVO
  • 11. BOLOVO - motivos • “Esses design patterns faziam muito sentido quando no J2EE os entity beans não eram serializáveis, e sim acessados remotamente, além de que não existia injeção de dependência.” • Paulo Silveira – em 2007 • Em .net não havia esses motivos • A arquitetura BOLOVO foi importada para projetos .net para organizar códigos e prover uma estrutura de arquitetura cebola
  • 12. BOLOVO – design das classes • Entidade/Model: • Palestra • BLL: • PalestraBLL • DLL: • PalestraDLL • MVC: • PalestraController Várias classes irmãs com os mesmos nomes e sufixos indicando sua função Uníca que realmente necessita ser escrita dessa forma
  • 13. BOLOVO Porque não usar por aí
  • 15. Não há necessidade para BOLOVO hoje • “Os programadores mais novos podem não ter sido influenciados pelos problemas dos EJBs mas ele ainda foram ensinados à programar de uma só maneira: código procedural.” • http://blog.fragmental.com.br/2010/01/18/domain-driven-bolovo-passando- conhecimento-e-etc/ PROCEDURAL!!!
  • 16. Programação procedural • Projeto em BOLOVO faz seu código ser procedural • “ Veja, no momento que separamos dados de um lado, e comportamento de outro, voltamos a programar de maneira procedural. Nesse tipo de arquitetura, é comum vermos imensas classes com as regras de negócios repetidas e espalhadas. A consequência disso? Um código dificílimo de ser mantido e evoluído.” • http://blog.caelum.com.br/o-que-e-modelo-anemico-e-por-que-fugir-dele/
  • 17. Um projeto inteiro de gets e setters • Projeto Entidades/Models inteiro de classes só com as propriedades • Classes anémicas != orientação a objetos • Classes que nem são testadas (só propriedades) • Sobre criar classes só com gets e setters: http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/
  • 18. Baixa testabilidade • Projeto entidades/models não é testado • Para testar BLL é preciso vários mocks de DAL (não necessáriamente uma coisa ruim, mas para você ver como há forte dependencia) • Métodos na BLL gigantes e dificeis de serem testados (afinal é preciso um mesmo métodos ter testes de lógica e de dados, tudo junto e misturado) • Uma odisséia para tentar usar TDD e você vai desistir logo no começo
  • 19. Nada de SOLID  • Princípio da Responsabilidade Única • classes da BLL além de lógica controlam cada aspécto de um model, inclusive a inserção na base de dados (as classes como PalestraBLL) • Princípio do Aberto-Fechado • Ao mudar uma classe possivelmente vai mudar todas as classes irmãs, cada inserção de funcionalidades precisa alterar outras classes em seguida tornando custoso a adição de novas funcionalidades
  • 20. Nada de SOLID  • Princípio de Substituição de Liskov • Não há em projetos BOLOVO subtipos • Se houver herança um subtipo de BLL, por exemplo, não pode ser substituidas por sua classe base • Princípio da Segregação de Interfaces • Interfaces para BLL nunca conseguem ter somente o que a classe precisa • Se possuem você provavelmente está colocando lógica nenhuma • Princípio da Inversão de Dependência • Classes da BLL dependem de implementações concretas de DAL e de Entidades/Models
  • 21. Resumo da opera entãaaoooo
  • 22. Resumo da opera • BOLOVO cai bem... Se você programa em java em 2004 • Não é boa prática • Dica: o projeto já nasce legado • Não há necessidade de programadores .net continuarem nessa estrutura hoje, em 2014!!
  • 23. O que eu faço então? • Sugestão: aprenda DDD • Aprenda TDD (se soubesse não estaria usando BOLOVO) • Fuja da preguiça – se for programar em linguagem orientada a objetos não há pra que ser procedural • Evolua e não pare no tempo (lembre: BOLOVO já era ruim em 2007)
  • 24. Dúvidas? Criticas, sugestões, idéias, convites para jogar Magic?