Escolar Documentos
Profissional Documentos
Cultura Documentos
- Eduardo Pires
Muitas vezes pela internet em busca de novos conhecimentos nos deparamos com diversas
siglas, estando elas anunciadas em algum requisito para desenvolvimento de sistema ou
at mesmo citadas em alguma abordagem tcnica.
Erick Evans lanou em 2003 o Domain-Driven Design: Tackling Complexity in the Heart of
Software Mal imaginou que o livro tanto quanto o conceito alcanaria tal sucesso e
respeito.
Quando pensamos em modelo nos vem cabea: UML, Diagrama de Sequncia, Diagrama
de Estados e todo arsenal que pudermos montar.
Mas no exatamente, o Modelo pode ser feito de qualquer forma que possa ser entendido,
Papel de po, UML, Lego ou Massa de modelar, No h padro para modelo. Se o seu
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 1/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Ubiquitous Language:
Traduzindo, Linguagem Onipresente, a que est em todo lugar. a linguagem de quem
entende do negcio.
Ex. O seu cliente, por um acaso um banco, fala Amortizao (pagamento de parcelas).
Logo sua equipe tambm fala Amortizao, e isso se repete no modelo e no cdigo.
uma forma de todos falarem a mesma lngua, a lngua do negcio (Domnio).
Para se obter sucesso de um projeto DDD necessrio que todos os integrantes falem e
entendam completamente o domnio.
Objetos de valor:
So objetos reconhecidos por seus atributos e geralmente so imutveis.
Por ex: Tipos de Conta so do tipo Corrente, Investimento, Crdito, Transitria e etc.
Sendo assim na hora de referenciar esse objeto de valor em sua entidade voc necessita
que ele possua estes tais atributos, pois fazem parte do domnio de seu negcio,
chamamos isso de Agregao.
Servios:
So ferramentas, pois no so entidades nem possuem objetos de valor.
Se por exemplo voc precisa enviar um relatrio de contas correntes ao Banco Central, sua
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 2/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
entidade bem como os objetos de valor no esto preparados para isso, voc precisa que
um servio execute essa tarefa, e por isso eles esto presentes no modelo de domnio do
DDD.
Factories:
Em portugus Fbricas, Factories criam objetos, existem cenrios quais so impossveis
de definir um objeto sem a criao dele atravs de uma Factory, sugiro para quem no
entende direito o conceito de Factory, a leitura deste exemplo.
Repositrio:
No importa onde esteja alocado seu repositrio, em algum momento voc vai precisar
guardar e recuperar um conjunto de informaes como um objeto.
Repositrios no tem regra de negcios, eles fazem a intermediao da sua camada de
domnio e sua camada de mapeamento de dados. Pode ser usado NHibernate, Entity
Framework entre outros, escolha bem o seu.
Enfim, qualquer abordagem de DDD muito bem aceito numa metodologia gil.
Receber os feedbacks dos donos do negcio ao tempo todo fundamental para uma
entrega assertiva. Dentro de uma metodologia gil programar pequenas entregas uma
boa prtica, pois no se inicia no 0% e entrega-se 100% com grandes chances de conter
desvios de entendimento.
Sprints, entregas particionadas, diminuem o risco de desvio do entendimento do domnio,
assim como do retrabalho.
Lembrando que uma metodologia gil no faz parte exatamente de uma abordagem de
DDD, mas muito bem vinda.
uma abordagem que oferece muita agilidade dentro do ciclo de desenvolvimento, a ideia
codificar um sistema com 100% de cobertura dos testes.
1. Escrever um teste, sem mesmo ter escrito o cdigo real a ser testado (Figure o que
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 3/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
deseja testar).
2. Executar os testes e acompanhar a falha (Pode ser um cdigo falso que retorne o
erro) (Red)
3. Escrevemos a funcionalidade do sistema que iremos testar.
4. Testar novamente, agora para passar (Se no passou algo saiu errado, faa
novamente o passo 3) (Green)
5. Refatore sua funcionalidade e a escreva por completo (o teste tambm) (Refactor)
6. Passe para o prxima estria ou caso de uso e inicie novo teste.
1 using System;
2 using NUnit.Framework;
3
4 namespace TDD.ClienteBanco
5 {
6 [TestFixture]
7 public class ContaTests
8 {
9 [Test]
10 public void TestAporte()
11 {
12 Conta conta = new Conta("Test");
13 conta.Deposito(500.0);
14 conta.Deposito(70.0);
15 Assert.AreEqual(570.0, conta.Balanco);
16 }
17 }
18 }
Resumindo, uma prtica bem utilizada e entende que o desenvolvimento feito do teste
para o cdigo.
Teste unitrio no tarefa do Tester e sim do desenvolvedor, em muitas empresas um
cdigo sem testes unitrios nem sobe no repositrio. Pense em cdigo, pense em teste de
cobertura de cdigo.
Para criao dos testes bem eficaz a utilizao de Mock, Dummy, Fake, Stub, que so
considerados dubls de teste, pois se passam por objetos reais sem a necessidade de
codificao dos mesmos na etapa da escrita do teste.
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 4/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Foi originalmente concebido em 2003, por Dan North, como uma resposta ao TDD, tem se
expandido muito assim como DDD e TDD.
uma abordagem que funciona tambm muito bem com uma metodologia gil,
encorajando desenvolvedores, pessoas de qualidade, no tcnicas e de negcios em um
projeto de software. Tambm defende o uso da ubiquitous language como explicado acima
facilitando a conversao entre toda equipe envolvida.
Dessa forma fica muito claro a todos quais so os objetivos que uma funcionalidade deseja
atingir e de muito fcil entendimento.
Os cenrios acompanham a funcionalidade de forma que demonstram comportamentos
para atend-la:
Cenrio : [ Nome ]
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 5/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
As palavras Dado que, Quando e Ento (Given, When e Then em ingls) so quase
sempre usadas para guiar os cenrios, no so obrigatrias.
A criao de requisitos para teste podem ser automatizados, existe uma ferramenta
chamada SpecFlow, que se adapta ao Visual Studio e suporta o idioma portugus.
Atravs do SpecFlow no Visual Studio necessrio adicionar um arquivo do tipo Feature
File .feature e nele seria escrever uma estria.
Um exemplo bem simples de estria de uma aplicao de vendas poderia ser: Venda de
balas na doceria.
#language: pt-br
Funcionalidade: Vender doces
Para quando uma doce for vendido
Eu, como vendedor
Desejo decrementar um item no estoque
Dado esta descrio o SpecFlow ir gerar um arquivo .feature.cs que ser usado para
testes, se rodar os testes aps o momento da criao do arquivo com certeza vo falhar,
afinal no existe a classe escrita nem a interface desenhada.
possvel fazer testes de interface e end to end sem muito esforo, usando ferramentas
como o Watin e tambm Mock, Dummy, Fake ou Stub como dubls de objetos.
nesse momento que entra o desenvolvimento da sua aplicao utilizando DDD e/ou TDD
(por que no?) e aps desenvolvida deve-se complementar o seu arquivo .feature.cs com
as chamadas da interface para reproduo do requisito desenhado, ento voc poder
acompanhar o funcionamento do seu negcio com base nesses testes.
isso ai pessoal, espero ter abordado o DDD, TDD e BDD de forma clara e que tenha
conseguido explicar cada um deles, suas diferenas entre si e como podem ser trabalhados
juntos.
Referncias:
.netarchitects
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 6/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Wikipedia
MSDN
Learning Test Driven Development
Publicado em .NET GERAL, ALM, ARQUITETURA por EDUARDO PIRES. Marque LINK
PERMANENTE [HTTP://EDUARDOPIRES.NET.BR/2012/06/DDD-TDD-BDD/] .
Danilo Miranda
em 13 de agosto de 2015 s 07:28 disse:
Muito bom!
Ricardo
em 8 de julho de 2015 s 02:22 disse:
Ol Eduardo,
Trabalho com DDD e Fluent NHibernte, no qual gosto muito e acho muito seguro,
posso manipular toda a arquitetura e querys.
Meu DDD em Fluent Nhibernate, tenho aplicaes em Win, Web, e Servios.
Minha duvida ? aplicaes onde toda microsoft.
Vale apena mudar para EF Code First, por mais que esteja imatura?
Paulo Viana
em 7 de julho de 2015 s 11:25 disse:
Paulo Henrique
em 10 de junho de 2015 s 18:23 disse:
Eduardo,
Estava estudando seu material que por sinal est muito mbom, e me surgiu a
seguinte dvida, em relao ao domnio, que est em relao ao idioma utilizado
para as classes, exemplo a entidade empresa poderia ser chamada de Company.
Ubiquitous Language:
Traduzindo, Linguagem Onipresente, a que est em todo lugar. a linguagem
de quem entende do negcio.
[]s
Guilherme
em 8 de agosto de 2016 s 16:04 disse:
https://www.youtube.com/watch?v=V8XoOzaxApM
Abrao
Angelo Ribeiro
em 9 de maio de 2015 s 11:20 disse:
Boa Eduardo. Material claro e objetivo. Comecei a acompanhar seu site a poucos
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 8/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
dias e estou gostando muito. Quando crescer quero ser igual a voc (hhaha).
Parabns pelo trabalho!
wilson
em 27 de abril de 2015 s 14:46 disse:
Boa tarde.
Eduardo, Estou iniciando um pequeno projeto, qual destes modelos seria o ideal?
Felipe Rocha
em 18 de novembro de 2014 s 09:42 disse:
abraos!
Eduardo Pires
em 13 de janeiro de 2015 s 23:21 disse:
Fala Felipe!
Abs!
Wanderlei Silva
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 9/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Vanessa Martins
em 18 de outubro de 2014 s 17:44 disse:
Adorei o artigo muito legal, vale a pena mesmo irei comear a implementar
Eduardo Pires
em 27 de outubro de 2014 s 23:02 disse:
Boa sorte
Abs!
Jordan Pedro
em 29 de junho de 2014 s 18:28 disse:
Sei que so perguntas meio amadoras mas estou comeando nesta parte.
Agradeo ateno.
E mais uma vez parabns pelo seu Site. Tenho muitos colegas que acompanham
bastante suas postagens.
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 10/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Eduardo Pires
em 29 de julho de 2014 s 19:20 disse:
Jordan,
Um projeto de teste para cada projeto, por ex, cada class library (camada)
tem seu prprio projeto de testes, isole tudo.
Abs!
Sousa
em 26 de abril de 2014 s 18:37 disse:
Eduardo Pires
em 29 de abril de 2014 s 09:17 disse:
Abs!
Ana Ferraz
em 25 de abril de 2014 s 14:39 disse:
Ana Ferraz
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 11/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Eduardo Pires
em 29 de abril de 2014 s 09:12 disse:
Abs!
Ana Silagi
em 18 de fevereiro de 2014 s 11:20 disse:
Parabns Eduardo!
Muito Obrigada,
Ana
Eduardo Pires
em 18 de fevereiro de 2014 s 22:36 disse:
Abraos.
Leandro Ribeiro
em 21 de janeiro de 2014 s 20:43 disse:
Excelente post. Vou at utilizar ele como sntese de DDD, TDD e BDD para a minha
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 12/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
equipe. Abs.
Eduardo Pires
em 21 de janeiro de 2014 s 23:00 disse:
Obrigado Leandro!
Abraos.
Fabio Marques
em 8 de janeiro de 2014 s 14:00 disse:
Eduardo Pires
em 8 de janeiro de 2014 s 15:11 disse:
Obrigado Fbio!
Abraos.
Reginaldo
em 20 de agosto de 2013 s 15:21 disse:
Ol Eduardo!
Minha pergunta est fora do contexto apresentado, mas seria para elogiar seu
blog, ficou bem clean, voc usou qual ferramenta para desenvolver, foi
WordPress?
Eduardo Pires
em 20 de agosto de 2013 s 16:27 disse:
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 13/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Ol Reginaldo,
Uso WordPress Self Host (pois assim posso customizar 100% do site).
Adriano RC
em 7 de maio de 2013 s 20:25 disse:
Eduardo Pires
em 9 de maio de 2013 s 16:32 disse:
Adriano, o uso das trs prticas algo normal, mas para isso necessrio
o domnio e entendimento de cada uma para no fazer confuso na hora
de usar.
Abraos.
Alexandre Rech
em 2 de maio de 2013 s 16:45 disse:
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 14/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Estou tentando aplicar BDD no projeto que estou trabalhando, porm estou com
uma dvida:
Em qual camada eu aplico BDD?
O que estou fazendo hoje BDD na interface com o usurio e TDD nas camadas de
Aplicao, Domnio e Infra-estrutura. Estou muito errado?
Eduardo Pires
em 2 de maio de 2013 s 17:23 disse:
Abraos.
Armando Janson
em 4 de abril de 2013 s 16:18 disse:
Eduardo,
Parabns pelo artigo, conseguiu explicar de forma simples e clara esses trs
conceitos que muitos muitas vez trabalham e desconhecem.Irei repassar.
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 15/16
02/11/2016 DDD, TDD, BDD, Afinal o que so essas siglas? - Eduardo Pires
Eduardo Pires
em 15 de abril de 2013 s 20:54 disse:
Continue visitando
Robson Monteiro
em 6 de junho de 2012 s 02:41 disse:
http://eduardopires.net.br/2012/06/ddd-tdd-bdd/ 16/16