Це питання, яке я задав деякий час назад, так що це може бути краще обговорено тут ...
Там, де я працюю, ми неодноразово переходили на цю тему і шукаємо перевірку стану безпеки. Ось питання: чи повинні бізнес-об’єкти бути контейнерами даних (більше схожі на DTO ) чи вони також повинні містити логіку, яка може виконувати певну функціональність на цьому об'єкті.
Приклад - візьміть об’єкт клієнта, він, ймовірно, містить деякі загальні властивості (ім'я, ідентифікатор тощо), чи повинен об’єкт клієнта також включати функції (Save, Calc тощо)?
Один рядок міркування говорить, що відокремлюють об'єкт від функціональності (основна відповідальність) та розміщують функціональність у шарі або об'єкті Business Logic.
Інший рядок міркувань говорить, що ні, якщо у мене є клієнтський об’єкт, я просто хочу зателефонувати Клієнту. Збережіть, і це робити з цим. Чому мені потрібно знати про інший клас, щоб зберегти клієнта, якщо я споживаю об'єкт?
У наших останніх двох проектів об'єкти були відокремлені від функціональності, але знову було порушено дискусію щодо нового проекту.
Що має більше сенсу і чому ??