Весна и модель анемичной области

Так что я'мы заметили, что у меня определенно есть склонность к шаблону моих объектов стека Spring / Hibernate, например:

Контроллер Foo звонитFooService»FooService вызывает метод FooRepository.getById () для получения некоторых Foos.FooRepository делает несколько вызовов Hibernate для загрузки объектов Foo.FooService осуществляет некоторые взаимодействия с Foos. Он может использовать связанный TransactionalFooService для обработки вещей, которые необходимо сделать вместе в транзакции.FooService просит FooRepository сохранить Foos.

Проблема здесь в том, что Foos неу меня нет никакой реальной логики. Например, если электронное письмо необходимо отправлять каждый раз, когда истекает срок действия Foo,не вызов Foo.expire (). Там'вызов FooService.expireFoo (fooId). Это по ряду причин:

Это'Раздражает доступ к другим сервисам и объектам из Foo. Это'это не бин Spring, и он был загружен Hibernate.Это'раздражает, когда Foo делает несколько транзакций.Это'Трудно решить, должен ли Foo отвечать за выбор того, когда сохранять себя. Если вы вызываете foo.setName (), должно ли foo сохранить изменения? Должно ли это ждать, пока вы не вызовете foo.save ()? Должен ли foo.save () просто вызывать FooRepository.save (this)?

Так что по этим причинам мои доменные объекты Spring, как правило, прославляются с некоторой логикой проверки. Может быть, это нормально. Может быть, веб-службы в порядке процедурного кода. Может быть, по мере написания новых функцийПриемлемо создавать новые сервисы, которые по-новому работают с теми же старыми объектами.

Но я'Я хотел бы уйти от такого рода дизайна, и яИнтересно, что другие Spring используют с этим? Вы боретесь с этим с помощью хитрых трюков, таких как ткачество во время загрузки (которое ямне не так удобно)? У тебя есть какой-то другой трюк? Как вы думаете, процедурные это хорошо?

Ответы на вопрос(4)

Ваш ответ на вопрос