On Tuesday, May 10, 2011 9:25:08 AM UTC+2, dhoffer wrote:
>
> Thanks for the reply...
>
> Regarding 1 at a minimum I need the code/refactoring support one would
> get if using manual factories.  E.g. If I add a constructor parameter
> or change parameter order I need it to keep the module/factory in
> sync.  In IDEA reordering would change it everywhere, adding something
> new would have a default value.  So it should at least add another
> bind() to the module where I have to fill out the types (and fail to
> compile until I do).  As it is now I have to manually keep both in
> sync.  My IDE has become Notepad.
>

bind()ings are about *what* to inject, not *where* to inject them. Adding a 
parameter to an @Inject-ed constructor doesn't mean you need a bind()ing, 
unless your new parameter's *type* needs a bind()ing; but that's when you 
create the *type* that you need to add the bind()ing, not when you use it.

Guice is all about not having to maintain "factories": if you need a new 
dependency in a class, just add an argument to your @Inject-ed constructor, 
or an @Inject-ed field or method; you don't have to go through hoops of 
maintaining some factory.

Maybe you'd like your IDE to warn you if your app is missing a dependency 
binding, but that's hard to do because Guice is about modularity: you 
wouldn't want your IDE to warn you of a missing dependency if you're 
developping a library where the dependency is meant to be provided by the 
"context/environment" the library is used in (e.g. some library depends on a 
JMS queue or JDBC connection, and the app that uses the library has to 
provide the binding)
 

> As a bonus the IDE should create the module as else the module really
> doesn't save any coding.  But I understand this is not a Guice problem
> it's a desired IDE feature.
>
> 1b. Another example, with Guice I can't even ask the IDE to find uses
> of a constructor so I can find where it's used/created because that
> usage is hidden behind the magic of annotations.  Again my IDE has
> become Notepad.
>

Because the class should only be instantiated by Guice, and you should let 
Guice inject it (i.e. not pass it around yourself), you can simply search 
for uses of the class itself.

2. In the module for a class (which is its factory)
>

No, the module only provides "configuration", the "factory" is the Injector 
you build with it (and other modules).
 

> I can have
> completely wrong bind statements and the compiler doesn't care.
>

How's it different from having "completely wrong" code in a factory method?
 

> It's
> not until runtime that errors are seen.  Unit tests generally use
> mocks (that's why its IoC) so that won't catch the error either.  I
> can add another test...really an integration test that causes Guice to
> create a live instance...that should catch any problems...but I'm
> concerned about that working in the general case because sometimes
> that will require lots of application code to fire up...not what is
> desired in a unit test.
>
> I guess my point here is that with manual factories those didn't need
> to be unit tested because with the compiler's help those are
> binary...you either have one or you don't...nothing really to test.
> With Guice lots can go wrong in the factory (Module).  And because I
> have no IDE help to maintain the module...lots does go wrong.
>

Can you give a concrete example? (code!)
 

> 3. I'll review and see if I can make improvements in how I manage
> modules.  To start I just had one package for these for the app...that
> was no good so now I name the module the same as the class with Module
> suffix and put in the same package as the class, that way I know where
> it is.  I have one master class where I new up all the modules and add
> to Guice.createInjector().  Not sure yet how this will work.
>
> Thanks again for you help...
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to