Não sei se eu entendi bem esse esquema da arquitetura do Evans. Dando uma olhada nas wikipedias da vida, parece que a proposta dele é oferecer uma série de práticas que ajudam a modelar sistemas cuja lógica de negocios é muito complicada, cooperando com especialistas de domínio e tentando compartimentar as idiossincrasias que surgem naturalmente na lógica de negócios deste tipo de sistema em partes específicas do código.
Pode não ser o caso geral. E não se contrapõe ao MVC.
O que eu entendo por MVC pro mundo java (posso estar errado) é que quando vc tenta separar as funcionalidades da sua aplicação em compartimentos comuns, isto é, colocar todo mundo que faz controle num canto, todo mundo que é visão no outro, e etc que vc promove reuso e organização (leia-se facilidade de manutenção) ao seu código.
Prá mim, controle e visão são coisas que devem ficar separadas sim justamente por essa lógica de reuso. Se eu tenho uma aplicação com interface web hoje (interface web prá mim é V) e eu quero mudar para uma aplicação em flash ou uma interface em linha de comando, eu não quero ficar mexendo muito na minha camada de controle, que deve estar cheia de métodos que representam ações em cima das informações.
Por isso, se eu for tratar exceções na minha camada de modelo que mandam emails ou emitem mensagens prá serem renderizadas por um JSP ou JSF, eu estou me comprometendo a ter que tratar isto quando for a interface linha de comando que estiver emitindo os comandos.
O exemplo clássico JAVA é o JSP na view, o Servlet no controle e os beans no modelo. JSP apresenta coisas, Servlets recebem requests e devolvem responses e alguém gerencia os beans, geralmente algum gerenciador de persistência. Se eu quiser arrancar meu JSP fora e implementar uma interface linha de comando, nada impede que os Servlets continuem pegando requests (que não precisam ser Http inclusive) e devolvendo response, desde que eles não saiam gerando HTML lá dentro. Até porque, HTML, prá mim, é decisão de VIEW.
Alguns anos atrás eu tive que dar manutenção num aplicativo que pegava dados científicos, processava e visualizava numa interface desktop swing. Só que ele também tinha uma interface linha de comando onde vc submetia os arquivos e ele gerava, em batch, os arquivos de saída que normalmente seriam visualizados. Minha manutenção era justamente transformar isso numa aplicação web. ou seja, eu não queria de jeito nenhum mexer na lógica de negócios, mas não podia contar com nada que fosse específico da interface swing tb.
Neste dia eu agradeci que o sistema tinha um mínimo de separação entre as 3 coisas.
É assim que eu entendo MVC.
Outro exemplo. Suponha que vc tem uma aplicação web que tem uma tela com um botão que dispara um processo qualquer, digamos, importação ou envio de mensagem. Se algo der errado, vc quer que apareça uma mensagem na tela avisando que alguma coisa ruim aconteceu.
Agora imagine que amanhã seu gerente te pede prá adicionar uma funcionalidade ao sistema que é fazer a mesma coisa a partir de uma tarefa agendada via quartz, cron ou algo do tipo. Prá rodar headless num outro servidor. Como deve ser gerada e prá onde vai sua mensagem de erro? Provavelmente vai ter que ir prá um arquivo ou tabela de log num banco. Com um bom MVC, fica mais fácil lidar com isso.
[]
Leo K.