Это вопрос, который я задал некоторое время назад на SO, но он может быть обсужден лучше здесь ...
Там, где я работаю, мы несколько раз обсуждали эту тему и ищем проверку на здоровье. Вот вопрос: должны ли Business Objects быть контейнерами данных (больше похожими на DTO ) или они также содержат логику, которая может выполнять некоторые функции для этого объекта.
Пример. Возьмите объект customer, он, вероятно, содержит некоторые общие свойства (Name, Id и т. Д.). Должен ли этот объект также включать функции (Save, Calc и т. Д.)?
В одной из рассуждений говорится, что отделите объект от функциональности (принципал единой ответственности) и поместите функциональность в слой или объект Business Logic.
Другая линия рассуждений говорит: нет, если у меня есть объект customer, я просто хочу вызвать Customer.Save и покончить с этим. Почему я должен знать о другом классе, чтобы спасти клиента, если я потребляю объект?
В двух последних наших проектах объекты были отделены от функциональности, но вновь возникли споры о новом проекте.
Что имеет больше смысла и почему?