Thank you all for the good advice. I am glad I posted the question!

You convinced me going the DI route. I will try with and without GIN.
I will let you know or post an follow-up question :)
(not this week).

Regards,

Ronald

On Jan 26, 10:03 am, Jan Ehrhardt <jan.ehrha...@googlemail.com> wrote:
> Hi Ronald,
>
> I would recommend to ways:
>
> You should configure two GIN modules. One for authorization type A and one
> for B. This will allow you to configure the dependency in different ways.
> The authorization type will become a global property of your application. In
> your EntryPoint, you could have something like this:
>
> switch(authorization) {
> case A:
>   ginjectorA.getPresenter();  // will create a presenter and its dependent
> view for auth type A
> case B:
>   ginjectorB.getPresenter();  // will create a presenter and its dependent
> view for auth type B
>
> }
>
> You should always recognize that each 'Ginjector' is a couple of
> configurations. It could look like this:
>
> @GinModules({ModuleA.class})
> public interface GinjectorA extend Ginjector {
>
> Presenter getPresenter()
>
> }
>
> @GinModules({ModuleB.class})
> public interface GinjectorB extend Ginjector {
>
> Presenter getPresenter()
>
> }
>
> So your ModuleA's configure method can look like this:
>
> public void configure() {
>   bind(Presenter.class).to(MyPresenter.class);
>   bind(View.class).to(ViewA.class);
>
> }
>
> ModuleB looks similar.
> The benefit of this solution is, that you can do the same for other views
> and dependencies too. You've got just one point where the global information
> of the authorization type comes in.
>
> The second way would be to create a provider that does the job. Your
> presenter gets a dependency to the provider  and the provider's 'get' method
> does the check. A provider is similar to a factory, but it isn't one.
>
> The idea of DI is to keep your code clean and in both cases it is done.
>
> Regards
> Jan Ehrhardt
>
>
>
> On Mon, Jan 25, 2010 at 6:15 PM, rmuller <rmul...@xiam.nl> wrote:
> > Hi Jan.
>
> > Guess what .. I am reading "Dependency Injection" (Dhanji R. Prasanna)
> > at this moment :)
> > So this was one of the things why I doubt my design. But I really do
> > not understand how DI (GIN) should
> > be applied in my case:
> > - A Presenter uses several Views. The view depends on the
> > authorization (implemented as enum). Now I do something like:
>
> > switch (authorization) {
> >    case A:
> >         view = new View(fieldSpecA);
> >         break;
> >    case B:
> >         // etc
>
> > }
>
> > Regards,
> > Ronald
>
> > On 25 jan, 17:18, Jan Ehrhardt <jan.ehrha...@googlemail.com> wrote:
> > > The reason, why another class creats both and than puts the view into the
> > > presenter is called Dependency Injection. It is a widely used pattern,
> > that
> > > means that you should inject dependencies into classes instead of using
> > > factories or doing something like 'new DependentClass()' in the
> > constructor.
> > > In the best case, your presenter refers to a view interface and gets its
> > > view implementation injected.
>
> > > The easiest way of doing Dependency Injection in GWT is GIN (
> >http://code.google.com/p/google-gin). It allows you to configure
> > > dependencies and let GIN do the creation of objects and put one into
> > another
> > > at runtime.
>
> > > Dependency Inection is one of the best practices in GWT (and Java too)
> > > development (http://www.youtube.com/watch?v=PDuhR18-EdM)
>
> > > Regards
> > > Jan Ehrhardt
>
> > > On Mon, Jan 25, 2010 at 2:54 PM, rmuller <rmul...@xiam.nl> wrote:
> > > > Should not the Presenter create the view?
> > > > Sometimes you need different views (based on authorization data in my
> > > > case) where you can reuse the Presenter. I let the Presenter decide
> > > > which view to use. I do this in the ctor.
> > > > In all examples I see however, the Presenter and View are created by
> > > > the parent Presenter/AppContext. Also every View has its own Presenter
> > > > (1 : 1). So I wonder if my design is correct.
>
> > > > What is the general opinion about this?
>
> > > > Ronald
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > Groups
> > > > "Google Web Toolkit" group.
> > > > To post to this group, send email to
> > google-web-tool...@googlegroups.com.
> > > > To unsubscribe from this group, send email to
> > > > google-web-toolkit+unsubscr...@googlegroups.com<google-web-toolkit%2Bunsubs
> > > >  cr...@googlegroups.com><google-web-toolkit%2Bunsubs
> > cr...@googlegroups.com>
> > > > .
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/google-web-toolkit?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Google Web Toolkit" group.
> > To post to this group, send email to google-web-tool...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > google-web-toolkit+unsubscr...@googlegroups.com<google-web-toolkit%2Bunsubs 
> > cr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-web-toolkit?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-tool...@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to