Acabei de começar a trabalhar em um projeto e estamos usando o design orientado a domínio (conforme definido por Eric Evans em Design orientado a domínio: lidando com a complexidade no coração do software . Acredito que nosso projeto seja certamente um candidato a esse design como Evans descreve em seu livro.
Estou lutando com a idéia de refatorar constantemente.
Eu sei que a refatoração é uma necessidade em qualquer projeto e acontecerá inevitavelmente à medida que o software for alterado. No entanto, na minha experiência, a refatoração ocorre quando as necessidades da equipe de desenvolvimento mudam, não como a compreensão do domínio muda ("refatorando para uma maior compreensão", como Evans chama). Estou mais preocupado com avanços na compreensão do modelo de domínio. Entendo fazer pequenas alterações, mas e se for necessária uma grande alteração no modelo?
Qual é uma maneira eficaz de convencer a si mesmo (e a outros) que você deve refatorar depois de obter um modelo de domínio mais claro? Afinal, a refatoração para melhorar a organização ou o desempenho do código pode ser completamente separada da expressividade em termos do código de linguagem onipresente. Às vezes, parece que não há tempo suficiente para refatorar.
Felizmente, o SCRUM se presta à refatoração. A natureza iterativa do SCRUM facilita a construção de um pequeno pedaço e a alteração dele. Mas, com o tempo, essa peça ficará maior e se você tiver um avanço após essa peça ser tão grande que será muito difícil mudar?
Alguém já trabalhou em um projeto usando design orientado a domínio? Se assim for, seria ótimo obter algumas dicas sobre este. Gostaria especialmente de ouvir algumas histórias de sucesso, já que o DDD parece muito difícil de acertar.
Obrigado!