GWT-Platform: куда должна идти бизнес-логика?

Я только что освоил GWTP, MVP, GIN и Dispatch.

В диспетчере есть класс Handler, который определяет, что делает действие, и что-то возвращает соответственно.

До сих пор я обнаружил, что у меня есть 2 действия, которые требуют выполнения одного и того же метода. Для чего я считаю, что ActionHandling - это не то место, где идет бизнес-логика, а то, что он должен идти на уровне позади него, который каким-то образом передает ему что-то

Как мне разместить свою логику? Я хотел бы позже использовать Hibernate, кстати.

РЕДАКТИРОВАТЬ:

в качестве примечания, применяя полученные ответы на практике, необходимо:

1.- Создайте класс модуля, который расширяет AbstractModule, он содержит

bind(Service.class).to(ServiceImpl.class);

2.- на вашем GuiceServletcontextListener добавьте свой serviceModule в метод getInjector return:

return Guice.createInjector(new ServerModule(), new DispatchServletModule(), new ServiceModule());

3.- В ваших конструкторах actionHandlers есть что-то вроде этого

@Inject
  TestHandler(Service service) { this.service=service }

person javaNoober    schedule 27.09.2011    source источник


Ответы (3)


MyService - это интерфейс? Если да, то вы забыли привязать его внутри Guice.

Лично я использую DAO, чтобы поместить свою логику между ActionHandlers и моей структурой персистентности (Hybernate, Objectify, Twig-Persist и т. Д.)

person Christian Goudreau    schedule 28.09.2011
comment
ага, забыл это сделать, запутался между уже связанными действиями, а затем привязкой службы - person javaNoober; 28.09.2011

Бизнес-логика должна быть в ваших бизнес-объектах, которые не зависят от ваших классов Handler. Постарайтесь спроектировать свой бизнес-уровень без привязки к технологиям. Обработчики делегируют всю значительную обработку бизнес-объектам, поэтому они (обработчики) на самом деле должны быть довольно тонкими.

person Mikael Couzic    schedule 27.09.2011
comment
Я предпочитаю иметь специальный сервисный уровень, очень похожий на вашу концепцию бизнес-объектов. Уровень обслуживания выполняет любую тяжелую работу (за исключением всего, что можно использовать повторно, я реорганизовал его в служебные классы ...), и я стараюсь, чтобы и мой обработчик, и классы DAO были довольно тонкими. - person Jason; 27.09.2011
comment
Вы оба правы, просто не был уверен, где я подключаю свою службу к обработчику, потому что я знаю, что у меня уже есть инъекция зависимостей с GIN, просто не знаю как, пытаясь ответить выше - person javaNoober; 28.09.2011

Вы можете попробовать внедрить сервисный уровень в обработчик. Сервис может быть создан как синглтон.

@Inject
public MyHandler(MyService service) {
  this.service = service;
}
person Sydney    schedule 27.09.2011
comment
Никогда не приходило в голову, что конструктор там был для этой цели, попробую, спасибо - person javaNoober; 28.09.2011
comment
Хорошо, не сработало, в сообщении говорится: 1) Не было привязано ни одной реализации для com.test.domain.Service. Я полагаю, что мне нужно что-то сделать и со своим Сервисом. Можешь дать мне руку? - person javaNoober; 28.09.2011