[dev] [commits] Horde-Hatchery branch master updated. 2374bf4d0704a85d5ef81f88a9d9a5ef5dea0f15

Gunnar Wrobel p at rdus.de
Tue Sep 22 21:11:47 UTC 2009


Hi James,

Quoting James Pepin <james at jamespepin.com>:

> Thats an interesting point.  We were working under the assumption
> that you would use either a factory class for buliding objects, or
> use setter injection for optional dependencies.

Same assumption here.

>  Your factory class would have the ability to try and
> get an instance.

Meaning the factory would do something like this:

   public static function getObject($injector)
   {
     $optdep = null;
     try {
       $optdep = $injector->getInstance('Opt_Dep');
     } catch (Exception $e) {
     }
     $result = new Object($optdep);
     return $result;
   }

Using hasInstance() this would look like this:

   public static function getObject($injector)
   {
     $result = new Object($injector->hasInstance('Opt_Dep') ?  
$injector->getInstance('Opt_Dep') : null);
     return $result;
   }

>  The hasInstance method you're speaking of... would it
> also run through the entire process of creating an instance if one
> is not already created?

No, definitely not.

> Or do you merely want to know if a cached
> instance exists on the Injector or one of its parents?  Or are
> looking for something that can tell you if the injector can create
> an instance?

This is what I'm looking for. I want to know if it makes sense to ask  
the injector for a given instance.

> So far, with the code as is, the only way to tell if an instance can be
> created is to try and fail.

As depicted in my example above. With hasInstance() you will have the  
overhead of checking the hierarchy of injectors for a binding to the  
given interface. You  will however avoid the overhead of calling  
createInstance() if it is not necessary. Probably no major gain. But  
to me it warrants the existence of such a function ;)

Cheers,

Gunnar

>
> On Tue, Sep 22, 2009 at 3:18 PM, Gunnar
> Wrobel <p at rdus.de[1]> wrote:
>  0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
class="im">Quoting Chuck Hagenbuch <
href="mailto:chuck at horde.org">chuck at horde.org>:
>   0pt 0.8ex; padding-left: 1ex;" class="gmail_quote"> Quoting
> Gunnar Wrobel < href="mailto:p at rdus.de">p at rdus.de>:
>   0pt 0.8ex; padding-left: 1ex;" class="gmail_quote"> As I only
> just started with the Provider I used in at a very few places so
> far. So there will be no pain in moving to the Injector. And I do
> like the Injector package as it is definitely *not* as bloated as
> some of the other frameworks I looked at. Well, probably depends on
> what you want to do with such a framework but the Injector looks
> pretty good for what Horde might need.

Cool.

  Within Horde_Provider I used some magic methods (__get(), __set(),
__isset(), and __unset()) for convenience. The Injector currently
offers getInstance() and setInstance(). Is there a specific reason for
avoiding the use of __get() and __set()?

I've passed this along to Bob and James, and cc:ed them on this
reply.

  When working with interface names I agree that I'd rather use
$injector->getInstance('Horde_Kolab_Server') than
$injector->Horde_Kolab_Server.
Nevertheless the factory based Binder allows you to bind the
instances to any name. And for the unit testing I find it convenient
if you can use your mocks without requiring the use of a dependency
injector:

$injector = new stdClass;
$injector->some_mock = Mock();

In any case the Injector should get a hasInstance() method. If you
agree I'll add it.

With hasInstance, what sort of logic would be checking it? It makes
sense to me for completeness, but on second thought I'm not 100% sure
what you'd use it for.

  Some dependencies can be optional. A factory method can check if
such dependencies are available. You probably would not need that
function if you rely solely on constructor injection.

Cheers,

Gunnar

  I wrote a short summary on how to use Horde_Provider with Horde
(http://cvs.horde.org/co.php/framework/Provider/doc/Horde/Provider/usage.txt?r=2374bf4d0704a85d5ef81f88a9d9a5ef5dea0f15).
Do you think it makes sense if I adapt it to the Injector and add it
to the package?

That would be fabulous!

Thanks,
-chuck

  --
Horde developers mailing list - Join the hunt:
http://horde.org/bounties/
Frequently Asked Questions: http://horde.org/faq/
To unsubscribe, mail: dev-unsubscribe at lists.horde.org



Links:
------
[1] mailto:p at rdus.de

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digitale PGP-Unterschrift
URL: <http://lists.horde.org/archives/dev/attachments/20090922/231cccdd/attachment.bin>


More information about the dev mailing list