Где я работаю, мы неоднократно возвращались на эту тему и искали проверку здравомыслия. Здесь вопрос: должны ли бизнес-объекты быть контейнерами данных (более похожими на DTO) или должны также содержать логику, которая может выполнять некоторые функции для этого объекта.
Пример. Возьмите объект клиента, он, вероятно, содержит некоторые общие свойства (имя, идентификатор и т.д.), если этот объект клиента также включает функции (Save, Calc и т.д.)?
В одной строке рассуждений выделен объект из функциональности (основной принцип ответственности) и помещается в функциональный уровень или объект бизнес-логики.
В другой строке рассуждений нет, если у меня есть объект клиента, я просто хочу вызвать Customer.Save и покончить с этим. Зачем мне нужно знать, как сохранить клиента, если я использую этот объект?
Наши последние два проекта имели объекты, отделенные от функциональности, но дискуссия снова была поднята по новому проекту. Что имеет смысл?
ИЗМЕНИТЬ
Эти результаты очень похожи на наши дебаты. Один голос с той или иной стороны полностью меняет направление. Кто-нибудь еще хочет добавить свои 2 цента?
ИЗМЕНИТЬ
Несмотря на то, что выборка ответов невелика, похоже, большинство считают, что функциональность бизнес-объекта приемлема, если она проста, но персистентность лучше всего размещается в отдельном классе/слое. Мы попробуем это. Спасибо всем за вклад...