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

예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
Relatorio de materiais de construcao ii traca e dobragem doo aco
Relatorio de materiais de construcao ii traca e dobragem doo acoRelatorio de materiais de construcao ii traca e dobragem doo aco
Relatorio de materiais de construcao ii traca e dobragem doo acoUniversidade Eduardo Mondlane
 
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introduçãoAgrupamento de Escolas da Batalha
 
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdf
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdfDimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdf
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdfEstevaoAquino
 
Galpões viga pilar
Galpões viga pilarGalpões viga pilar
Galpões viga pilarTiago Torres
 
SkimaTalk Introduction
SkimaTalk IntroductionSkimaTalk Introduction
SkimaTalk IntroductionSkimaTalk
 
Aula 1 linguagem html (1)
Aula 1   linguagem html (1)Aula 1   linguagem html (1)
Aula 1 linguagem html (1)Kaoru Hatake
 
Orientações para a elaboração e apresentação de projeto de barragem
Orientações para a elaboração e apresentação de projeto de barragemOrientações para a elaboração e apresentação de projeto de barragem
Orientações para a elaboração e apresentação de projeto de barragemiicabrasil
 
Git e Github para Iniciantes
Git e Github para IniciantesGit e Github para Iniciantes
Git e Github para IniciantesLoiane Groner
 
Gestão de-custos
Gestão de-custosGestão de-custos
Gestão de-custoskerybrowser
 
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoAlgoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoRodrigo Kiyoshi Saito
 

Mais procurados (20)

MySQL #06 - Modificando Estrutura ALTER TABLE
MySQL #06 - Modificando Estrutura ALTER TABLEMySQL #06 - Modificando Estrutura ALTER TABLE
MySQL #06 - Modificando Estrutura ALTER TABLE
 
Curso de Inglês p/ Concurso ANAC
Curso de Inglês p/ Concurso ANACCurso de Inglês p/ Concurso ANAC
Curso de Inglês p/ Concurso ANAC
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
Relatorio de materiais de construcao ii traca e dobragem doo aco
Relatorio de materiais de construcao ii traca e dobragem doo acoRelatorio de materiais de construcao ii traca e dobragem doo aco
Relatorio de materiais de construcao ii traca e dobragem doo aco
 
Compiladores 6
Compiladores 6Compiladores 6
Compiladores 6
 
Páginas dinâmicas
Páginas dinâmicasPáginas dinâmicas
Páginas dinâmicas
 
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
5 – Desenvolvimento de Páginas Web Dinâmicas PHP: introdução
 
Mecdossolos ii
Mecdossolos iiMecdossolos ii
Mecdossolos ii
 
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdf
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdfDimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdf
Dimensionamento de Elementos Estruturais de Aço e Mistos Aço e Concreto.pdf
 
Galpões viga pilar
Galpões viga pilarGalpões viga pilar
Galpões viga pilar
 
SkimaTalk Introduction
SkimaTalk IntroductionSkimaTalk Introduction
SkimaTalk Introduction
 
Formação cobol
Formação cobolFormação cobol
Formação cobol
 
Aula 1 linguagem html (1)
Aula 1   linguagem html (1)Aula 1   linguagem html (1)
Aula 1 linguagem html (1)
 
Guia Apeb
Guia ApebGuia Apeb
Guia Apeb
 
Orientações para a elaboração e apresentação de projeto de barragem
Orientações para a elaboração e apresentação de projeto de barragemOrientações para a elaboração e apresentação de projeto de barragem
Orientações para a elaboração e apresentação de projeto de barragem
 
Git e Github para Iniciantes
Git e Github para IniciantesGit e Github para Iniciantes
Git e Github para Iniciantes
 
CSS FLexBox
CSS FLexBoxCSS FLexBox
CSS FLexBox
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
 
Gestão de-custos
Gestão de-custosGestão de-custos
Gestão de-custos
 
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - ResolucaoAlgoritmos - Aula 07 B - Exercicios Vetores - Resolucao
Algoritmos - Aula 07 B - Exercicios Vetores - Resolucao
 

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 Bolovo - problema antigo de arquitetura de software - não use por aí

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 Bolovo - problema antigo de arquitetura de software - não use por aí (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
 

Bolovo - problema antigo de arquitetura de software - não use por aí

  • 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?