-
Notifications
You must be signed in to change notification settings - Fork 2
3. Domain Driven Design
Normalmente quando se fala em DDD, já vem a cabeça que é só criar uma Class Library pro Domain, uma pra Infra, uma pra Application e um projeto de GUI pra Presentation e o DDD está feito. Na verdade, tentarei ir um pouco além disso. Gostaria de dar mais expressividade para nossa estrutura e explorar melhor alguns conceitos de DDD.
Na fase de arquitetura propriamente dita é fundamental compreender e respeitar o que a solução em pauta realmente necessita. Ter um "Template de DDD", uma estrutura pré-definida é simplesmente uma receita de bolo, uma bala de prata. O importante aqui é compreender a metodologia, os benefícios de cada prática, princípio ou padrão para ter libertade de arquiteturar uma solução.
Para esse projeto tentarei utilizar práticas de DDD que lhe são cabíveis, mas não todas. Tentei aplicar aqui algumas práticas apesar de não termos complexidade o suficiente para vermos níveis mais avançados de arquitetura, mas teremos uma boa iniciação nas suas práticas básicas, Modelagem do Domínio e Linguagem Ubíqua.
Neste primeiro projeto o BoundedContext é o próprio jogo Tetris, no futuro outros contextos podem ser adicionados para outros jogos ou modalidades.
Você também não verá nesse projeto pastas chamadas de Entidades, ValueObjects, Interfaces, etc. Veja, esse tipo de modelagem está modelando guiado por tipo de objeto e não pelo Domínio. Os termos Entidades, Interfaces e ValueObjects não são coisas que existem para seu cliente, não fazem parte do domínio dele (a não ser que seu cliente seja uma empresa de software), esses termos ajudam o arquiteto de soluções a identificar um tipo de objeto, mas não precisam ser destacados na arquitetura. Neutralidade tecnológica!
O Domínio precisa ser expressivo, você precisa aprender com ele, falar a lingua dele e utilizar dele para se manter focado no problema (estar no domínio). Exclusivamente no DomainModel, tento manter ao máximo a linguagem ubíqua, não apenas nomenando os objetos em linguagem natural mas também falando em voz alta e refletindo se o que eu falei faz sentido ou se parecia estar falando com uma máquina! Eventualmente, farei uso de uma licença poética para mesclar português com inglês, principalmente quando estiver lidando com Patterns.