1) O documento discute o Domain-Driven Design (DDD), uma abordagem focada no domínio e na lógica de negócios.
2) As duas principais premissas do DDD são desenvolver um modelo que reflita o domínio e usar uma linguagem ubíqua compartilhada entre os especialistas de negócios e a equipe de desenvolvimento.
3) O DDD enfatiza a separação de camadas com base no domínio, utilizando conceitos como entidades, valores, agregações, serviços, fábricas e repositó
13. “ 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
25. 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
39. 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
40. public struct Categoria { public string Nome { get ; private set ; } public int Id { get ; private set ; } private static Categoria _Veiculos = new Categoria () { Id = 1 , Nome = "Veiculos" }; public static Categoria Veiculos { get { return _Veiculos; } } private static Categoria _Livros = new Categoria () { Id = 2 , Nome = "Livros" }; public static Categoria Livros { get { return _Livros;} } 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; } }
41. 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
44. 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
45.
46. Factories criam objetos Levemente diferente das factories de padrões de projeto Será responsabilidade de um objeto se construir? Objetos devem ser criados consistentes
48. 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
49. public class RepositoryCargaSQLServer : IRepositoryCarga { public Carga RecuperarCarga( int id) { var cmd = new SqlCommand ( "SELECT ..." ); 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 = "INSERT..." ; else cmd.CommandText = "UPDATE..." ; cmd.ExecuteNonQuery(); } } Podem ser assim...
50. public void SalvarVeiculacao( IVeiculacao veiculacao) { using ( var db = new VendasOnlineEntities ( this ._conn) { var veiculacaoDB = ( from veics in db.Veiculacao.Include( "Produto" ) .Include( "Pagamento.PagamentoBoleto" ) .Include( "Pagamento.PagamentoCartaoCredito" ) where veics.Id == veiculacao.Id select veics).First(); AtualizarVeiculacao(veiculacaoDB, veiculacao, db); db.SaveChanges(); } } Assim...