Внедрение Guice и RequestFactory: расширение ServiceLayerDecorator

Я искал решение для использования инъекции зависимостей Guice вместе с RequestFactory. Я наткнулся на это: https://github.com/etiennep

У меня это не сработало, поэтому я изменил реализацию InjectedServiceLayerDecorator.java на это:

https://github.com/opncow/injected-requestfactory/blob/master/src/main/java/com/trycatchsoft/gwt/requestfactory/InjectedServiceLayerDecorator.java

Теперь мои вопросы:

Можно ли что-то сделать лучше в отношении механизма кэширования RequestFactory (он все еще работает?)? Для чего нужны getTop() и getNext() (в ServiceLayerDecorator)? И правильно/безопасно ли использовать getTop() в этом месте?

Извините, мысль слишком сложная! Это было так же просто, как:

Class<?> serviceClazz = resolveServiceClass(requestContext);
        return injector.getInstance(serviceClazz);

person opncow    schedule 24.09.2011    source источник


Ответы (1)


Для чего нужны getTop() и getNext() (в ServiceLayerDecorator)?

ServiceLayer использует шаблон цепочки ответственности: если вашему декоратору нечего делать, он должен делегировать полномочия следующему декоратору в цепочке (возвращенному getNext), вызвав тот же метод с теми же аргументами. Если ваш декоратор изменяет аргументы или ему нужно вызвать другой метод, он должен вызывать его на getTop, чтобы вызов направлялся через все декораторы, а не только те, что идут после него в цепочке.

Таким образом, ваше использование getTop является правильным и безопасным (посмотрите на LocatorServiceLayer из GWT, это именно то, что он делает).

Но ваш код (и код Этьена!) на самом деле можно сделать проще и лучше: просто переопределите createServiceLocator, чтобы получить экземпляр из вашего инжектора (так же, как createLocator).

person Thomas Broyer    schedule 24.09.2011
comment
Спасибо за понимание! Теперь я использую createServiceLocator, и это намного проще и работает отлично. - person opncow; 28.09.2011