Array
(
)

Criar classe usando DDD

Pjava
   - 22 fev 2013

Escrever uma classe em C # baseado em duas tabelas, incluindo a conexão com o banco de dados, utilizando os conceitos de DDD (Domain Driven Design), e os testes de unidade apropriados.
Abaixo as tabelas:
Tables
Order
IdOrder
INT(pk)
dataOrder
DATETIME
nmOwner
VARCHAR(50)

OrderItem
IdOrderItem
INT(pk)
IdOrder
INT(fk)
valorItem
MONEY

Rodrigo Odasaki
   - 22 fev 2013

? ? ?

Pjava
   - 22 fev 2013

Eu passei as tabelas e como eu crio a(s) classe(s) baseadas nessas tabelas, usando DDD?

Code Easy
   - 04 mar 2013

Vamos a implementação seguindo o DDD. Como não sei qual é o domínio da sua aplicação vou montar o exemplo como Faturamento, mas se não for, depois você muda:
1) Crie um projeto de domínio do tipo Class Library chamado Faturamento.Domain ou em português, Faturamento.Dominio. Eu particularmente prefiro em inglês;
2) Crie uma pasta chamada Entity ou Entidade para armazenar as classes de negócio;
3) Crie uma classe chamada Order ou Ordem na pasta Entity;
4) Faça o mesmo para a classe ItemDaOrdem ou ItemOrdem, como preferir. Mas se for usar preposição, use para todas as classes.

Obs: os nomes das propriedades devem ser os mais descritivos possível, pois é isso que visa o DDD, ser o mais informativo possível, ou seja, sem abreveações, mesmo que o nome fique grande mais. Ex.:
a coluna IdOrder ficará a propriedade Identificador;
A coluna dataOrder virará a propriedade DataDaOrdem;
A coluna nmOwner virará a propriedade e assim por diante.

Qualquer dúvida, posso te mandar uns exemplos e material. Meu email é contato@codeiteasy.com.br

Code Easy
   - 04 mar 2013

Vamos a implementação seguindo o DDD. Como não sei qual é o domínio da sua aplicação vou montar o exemplo como Faturamento, mas se não for, depois você muda:
1) Crie um projeto de domínio do tipo Class Library chamado Faturamento.Domain ou em português, Faturamento.Dominio. Eu particularmente prefiro em inglês;
2) Crie uma pasta chamada Entity ou Entidade para armazenar as classes de negócio;
3) Crie uma classe chamada Order ou Ordem na pasta Entity;
4) Faça o mesmo para a classe ItemDaOrdem ou ItemOrdem, como preferir. Mas se for usar preposição, use para todas as classes.

Obs: os nomes das propriedades devem ser os mais descritivos possível, pois é isso que visa o DDD, ser o mais informativo possível, ou seja, sem abreveações, mesmo que o nome fique grande mais. Ex.:
a coluna IdOrder ficará a propriedade Identificador;
A coluna dataOrder virará a propriedade DataDaOrdem;
A coluna nmOwner virará a propriedade e assim por diante.

Qualquer dúvida, posso te mandar uns exemplos e material. Meu email é contato@codeiteasy.com.br

Code Easy
   - 04 mar 2013

Esqueci de falar sobre a camada de dados.
1) Crie um outro projeto chamado Faturamento.Infrastruture ou Faturamento.Infraestrutura para armazenar as classes de dados.
2) Crie uma pasta chamada Repository ou Repositorio
3) Crie uma classe chamada OrdemRepository dentro da pasta Repository
4) crie os métodos da ordem na classe de repositório (ObterTodos, Inserir, Excluir, Alterar, ObterPelaChave, etc).
Obs: Como boa prática, Você pode criar uma interface de Repositorio para criar o padrão de métodos que todos os repositórios irão ter (ObterTodos, Inserir, Excluir, Alterar, ObterPelaChave, etc)

Para os repositórios, aconselho usar um ORM (ex.: NHibernate ou Entity Framework).

Para as classes de teste, crie um outro projeto só para isso.

Pjava
   - 05 mar 2013

Code, meu note quebrou e não consegui ainda testar o seu exemplo. Tão logo eu o tenha em minhas mãos, testarei e postarei o resultado. De antemão, te agradeço.

Joel Rodrigues
   - 30 jun 2013

Fala, PJava, li um artigo muito interessante recentemente sobre a união do DDD com TDD no desenvolvimento de uma aplicação. Achei bem legal a abordagem, que criava as classes com base em testes que foram feitos sobre alguns requisitos do sistema.

Você chegou a implementar algo nesse caminho? Gostaria de compartilhar a experiência conosco?