Tem dias que acho que as pessoas tem medo de se orientarem à objetos.
Nem é questão de entrar em mérito se é DDD ou não, mas acho que muita gente está afundada em código de baixo nível (no mesmo sentido de linguagens de baixo/alto nível), preferem uma sintaxe rápida(?!?) e burra a uma inteligente, mais humana.
Falo isso por que vejo, todo santo dia, pessoas (também me incluo) comparando suas estruturas com nulo, com variável igual a tal, se os estado deles é igual a xpto, se é maior, menor blah blah. Tudo bem que é isso que acontece mesmo, você é obrigado a trabalhar com essas construções se quiser ter algum resultado, porém esse código não deveria estar no teu negócio. Código de baixo nível deve ser encapsulado.
Existe uma [color=white]doença^W tendência^W[/color] mania de descobrir quem é objeto, o que tem guardado nele, qual é a relação dele com outro. Se quiser saber alguma coisa do objeto, pergunte ao próprio. Se quiser fazer alguma coisa, mande ele fazer.
Outra mania é usar nulos para expressar alguma coisa. Nulos não expressam coisa alguma!
Caso você procurar por um cliente, e o método de procura retornar um Cliente, retorne o objeto nulo ClienteNãoCadastrado caso você não o achar, depois pergunte ao objeto “cliente.estaCadastrado() ?”. Esqueça de comparar (cliente != null), ou pior, gerar uma ClienteNãoCadastradoException.
Não tema objetos (de verdade)! Aliás, não tema programação limpa, ou Dijkstra vai te pegar!