Esta é uma pergunta que fiz há algum tempo no SO, mas pode ser discutida melhor aqui ...
Onde trabalho, abordamos esse assunto várias vezes e estamos procurando uma verificação de sanidade. Aqui está a pergunta: os Objetos de Negócios devem ser contêineres de dados (mais parecidos com DTOs ) ou também devem conter lógica que possa executar alguma funcionalidade nesse objeto.
Exemplo - Pegue um objeto de cliente, ele provavelmente contém algumas propriedades comuns (Nome, ID, etc.). Esse objeto de cliente também deve incluir funções (Salvar, Calc, etc.)?
Uma linha de raciocínio diz que separa o objeto da funcionalidade (principal de responsabilidade única) e coloca a funcionalidade em uma camada ou objeto de lógica de negócios.
A outra linha de raciocínio diz que não, se eu tiver um objeto de cliente, quero apenas chamar Customer.Save e terminar com ele. Por que preciso saber sobre outra classe para salvar um cliente se estou consumindo o objeto?
Nossos dois últimos projetos tiveram os objetos separados da funcionalidade, mas o debate foi levantado novamente em um novo projeto.
O que faz mais sentido e por quê?