Siga a segunda abordagem, simplesmente pelo fato de poder introduzir novos tipos ou itens de recursos a qualquer momento, sem precisar reescrever ou atualizar o código ( desenvolvimento orientado a dados ).
Editar:
Para elaborar um pouco mais sobre por que isso é uma boa prática geral, mesmo que você tenha 100% de certeza de que algum valor nunca será alterado.
Vamos dar o exemplo do jogo de console mencionado nos comentários, porque isso fornece uma boa razão para você não codificar nada, a menos que você realmente tenha (ou queira), por exemplo, chaves de criptografia, seu próprio nome, etc.
Ao lançar um jogo em consoles, eles geralmente precisam passar por um processo de revisão, onde o controle de qualidade do fabricante do console testará o jogo, jogará com ele, procurará por problemas etc. Isso é obrigatório e custa muito dinheiro. Acho que li uma vez que um release pode custar entre US $ 30.000 e US $ 50.000 apenas para a certificação.
Agora imagine que você está apostando no lançamento, pagando os US $ 30.000 e aguarde. E de repente você percebe que alguns dos valores do seu jogo estão literalmente quebrados. Digamos que você possa comprar barras de ferro por 50 de ouro e vendê-las por 55 de ouro.
O que você faz? Se você codificou essas coisas, terá que criar uma nova versão de atualização / lançamento, que precisará ser revisada mais uma vez; portanto, na pior das hipóteses, você pagará mais uma vez pela recertificação! Aposto que a Ubisoft não se importará, mas para o seu próprio bolso de desenvolvedor de jogos indie ... ai!
Mas imagine que o jogo apenas verifique ocasionalmente as definições atualizadas do jogo (por exemplo, na forma de um arquivo JSON). Seu jogo pode baixar e usar a versão mais recente a qualquer momento, sem a necessidade de uma nova atualização. Você pode corrigir esse desequilíbrio / exploração / bug a qualquer momento, sem exigir a recertificação ou qualquer outro dinheiro pago. Apenas uma pequena decisão de projeto, você não achou que valesse a pena, apenas economizou uma quantia em dinheiro de 5 dígitos! Isso não é incrível? :)
Só não me interpretem mal. Isso também se aplica a outros tipos de software e plataformas. O download de arquivos de dados atualizados é geralmente muito mais fácil e viável para o usuário padrão, não importa se é um jogo ou algum tipo de aplicativo / ferramenta. Imagine um jogo instalado em Arquivos de Programa no Windows. Seu atualizador precisa de direitos de administrador para modificar qualquer coisa e você não pode modificar os programas em execução. Com o DDD, seu programa apenas baixa os dados e os utiliza. O jogador pode nem perceber que houve uma atualização.