Em primeiro lugar, antes que alguém grite enganado, tive dificuldade em resumir em um título simples. Outro título poderia ser "Qual é a diferença entre um modelo de domínio e um modelo MVC?" ou "O que é um modelo?"
Conceitualmente, entendo um modelo como os dados usados pelas visualizações e pelo controlador. Além disso, parece haver muitas opiniões divergentes sobre o que constitui o modelo. O que é um modelo de domínio versus um modelo de aplicativo, versus um modelo de visualização, versus um modelo de serviço, etc.
Por exemplo, em uma pergunta recente que fiz sobre o padrão do repositório, fui informado que o repositório faz parte do modelo. No entanto, li outras opiniões de que o modelo deve ser separado do modelo de persistência e da camada de lógica de negócios. Afinal, o padrão Repositório não deveria separar o método de persistência concreto do modelo? Outras pessoas dizem que há uma diferença entre o modelo de Domínio e o modelo MVC.
Vamos dar um exemplo simples. O AccountController que está incluído no projeto padrão MVC. Eu li várias opiniões de que o código de conta incluído é de design ruim, viola SRP, etc. etc. Se alguém fosse criar um modelo de associação "adequado" para um aplicativo MVC, o que seria?
Como você separaria os serviços ASP.NET (provedor de associação, provedor de função, etc.) do modelo? Ou você faria?
A meu ver, o modelo deve ser "puro", talvez com lógica de validação .. mas deve ser separado das regras de negócios (diferente de validação). Por exemplo, digamos que você tenha uma regra de negócios que diz que alguém deve receber um e-mail quando uma nova conta é criada. Isso realmente não pertence ao modelo, na minha opinião. Então, onde ele pertence?
Alguém se preocupa em lançar alguma luz sobre esse assunto?