Domain Driven Design (DDD) - DevIsland, BH

3.167 visualizações

Publicada em

Palestra dada no evento de lançamento do grupo de usuários DevIsland, de Belo Horizonte.
http://devisland.com/

Publicada em: Tecnologia
0 comentários
6 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.167
No SlideShare
0
A partir de incorporações
0
Número de incorporações
889
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 25/06/10
  • 25/06/10
  • Domain Driven Design (DDD) - DevIsland, BH

    1. 1. Giovanni Bassi Consultor independente giovannibassi.com [email_address]
    2. 2. Giovanni Bassi
    3. 3. Online @ <ul><li>Giovanni Bassi Email: [email_address] Blog: unplugged.giggio.net Consultoria: giovannibassi.com Scrum Dev: scrumdev.com.br Podcast: tecnoretorica.com.br Twitter: @giovannibassi </li></ul><ul><li>.Net Architects Grupo: www.dotnetarchitects.net Podcast: podcast.dotnetarchitects.net Online: tinyurl.com/DotNetArch Dojo: dojo.dotnetarchitects.net Twitter: #DotNetArchitects @NetArchitects </li></ul>
    4. 4. Orientação a objetos? Objetivo
    5. 6. NHibernate Datasets Camadas Orientação a objetos Waterfall Agilidade Injeção de dependência Entity Framework Rails Cloud Computing SOA Linguagens Dinâmicas
    6. 7. Visão de futuro ou... Porque o arquiteto deve ser preocupar com DDD
    7. 8. Começando pelo começo: o que é DDD? “ É uma abordagem para o desenvolvimento de software”
    8. 11. Qual o foco do DDD?
    9. 13. Focado no domínio!
    10. 14. “ Para a maioria dos projetos de software o foco principal deve ser no domínio e na lógica do domínio .” “ Desenhos complexos de domínio devem ser baseados em um modelo .” Quais são as duas principais premissas do DDD? Eric Evans
    11. 15. Domínio? <ul><li>Esfera de conhecimento, influência ou atividade. </li></ul><ul><li>A área em que o usuário utiliza o software. </li></ul>
    12. 16. Modelo? Não...
    13. 17. O mundo Século XI
    14. 18. O mundo Século XVIII
    15. 19. O mundo
    16. 20. Modelos são baseados em abstrações
    17. 21. O mundo
    18. 26. Modelos são abstrações Isso quer dizer que o que não interessa fica de fora Se você conseguir equalizar isso, o modelo é perfeito Modelos devem refletir o código ou são irrelevantes
    19. 27. Não há padrão para um modelo
    20. 28. Ele pode ser assim...
    21. 29. Ou até assim...
    22. 30. No modelo vão...
    23. 31. Ubiquitous Language (está em toda parte) Vem dos business experts É refletida no modelo É refletida no código É falada pelo time
    24. 32. “ Tabela” “ Classe” “ Thread” “ Banco de dados” “ Façade” “ .Net 3.5” “ Carga” “ Conta corrente” “ Serviço de tradução de itinerário” “ Repositório de clientes” “ Agendamento de horário”
    25. 33. Ouça o Business Expert É ele quem conhece o problema, não você
    26. 35. Camadas devem fazer sentido (verifique suas responsabilidades) Se não separou não é camada Layers != Tiers Camadas
    27. 37. “ Esta camada é o coração de um software de negócios” Eric Evans
    28. 38. Utilize: ( )
    29. 39. Entidades possuem identidade Entidades têm significado no domínio
    30. 40. Objetos de valor não tem identidade para o negócio Freqüentemente são imutáveis São reconhecidos por seus atributos Cores: Azul Amarelo Verde Vermelho
    31. 41. public struct Categoria {     public string Nome  { get ; private set ; }     public int Id      { get ; private set ; }       private static Categoria _Veiculos = new Categoria () { Id = 1 , Nome = &quot;Veiculos&quot; };     public static Categoria Veiculos     { get { return _Veiculos; } }     public override bool Equals( object obj)     {         if (!(obj is Categoria ))             return false ;         return (( Categoria )obj).Nome == this .Nome;                }     public static bool operator ==( Categoria objA, Categoria objB)     { return objA.Equals(objB); }      public static bool operator !=( Categoria objA, Categoria objB)     { return !objA.Equals(objB); }      public override int GetHashCode()     { return this .Id; }        }
    32. 42. Agregações reunem entidades e objetos de valor de maneira que faça sentido para o negócio Agregações definem fronteiras claras Toda agregação tem uma raiz
    33. 44. Algumas regras...
    34. 45. Serviços resolvem problemas de negócio mas não são entidades nem objetos de valor Serviços não possuem estado de negócio
    35. 47. Factories criam objetos Levemente diferente das factories de padrões de projeto Será responsabilidade de um objeto se construir? Objetos devem ser criados consistentes
    36. 48. Como criar qualquer destes objetos? Só com factories
    37. 49. Repositórios fingem que têm todos os dados na memória Para o consumidor do repositório não faz muita diferença onde está o objeto Os Repositórios são os responsáveis por persistir e destruir os objetos
    38. 50. public class RepositoryCargaSQLServer : IRepositoryCarga {     public Carga RecuperarCarga( int id)     {         var cmd = new SqlCommand ( &quot;SELECT ...&quot; );         var adapter = new SqlDataAdapter (cmd);         var dataset = new DataSet ();         adapter.Fill(dataset);         var factory = new FactoryCarga ();         var carga = factory.CriaCarga(dataset.Tables[0].Rows[0]);         return carga;     }     public void ArmazenaCarga( Carga carga)     {         var cmd = new SqlCommand ();         if (carga.ID == -1)             cmd.CommandText = &quot;INSERT...&quot; ;         else             cmd.CommandText = &quot;UPDATE...&quot; ;                    cmd.ExecuteNonQuery();     } } Podem ser assim...
    39. 51. Ou assim...
    40. 52. Mais regras...
    41. 54. Ciclo de vida: Factories criam Repositórios recuperam Repositórios alteram Repositórios destroem
    42. 55. Processo
    43. 56. Funciona assim? Levantamento Análise Codificação Testes Implantação
    44. 57. Feedback é fundamental
    45. 58. Assim é bem mais fácil
    46. 59. Abrace as mudanças... ... não brigue com elas
    47. 62. Mas pode dar trabalho Então o foco são projetos com regras de negócio complexas
    48. 72. Downloads <ul><li> </li></ul>
    49. 73. Referências
    50. 74. Recomendação de leitura
    51. 75.
    52. 77. Online @ <ul><li>Giovanni Bassi Email: [email_address] Blog: unplugged.giggio.net Consultoria: giovannibassi.com Scrum Dev: scrumdev.com.br Podcast: tecnoretorica.com.br Twitter: @giovannibassi </li></ul><ul><li>.Net Architects Grupo: www.dotnetarchitects.net Podcast: podcast.dotnetarchitects.net Online: tinyurl.com/DotNetArch Dojo: dojo.dotnetarchitects.net Twitter: #DotNetArchitects @NetArchitects </li></ul>

    ×