Re: When to instantiate a new class

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/28/2015 03:12 AM, Jesse Schalken wrote:
On Sun, Jun 28, 2015 at 4:05 AM, Larry Garfield <larry@xxxxxxxxxxxxxxxx>
wrote:

What you describe is a service locator.  Which is basically the same thing
as a dependency injection container that you pass into the object you're
using.  Google "service locator bad" for why you shouldn't do that. :-)

"Service Locator" (according to this
<http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/> and this
<https://en.wikipedia.org/wiki/Service_locator_pattern>) seems to be when
you have a global registry mapping class names (or some other key) to some
means of instantiating that class/service. That *would* cause problems.

What I was describing was something simple like this:

*snip*

I understood what you meant. I'm saying that's still a Service Locator. Just because it's not one single global god object doesn't mean you're not using it as a service locator.

In your example, your class is now coupled to its real dependencies, but only implicitly. Implicit dependencies are a great source of bugs and accidental tight coupling. It's also coupled to your dependency wrapper object. So you've added more dependencies this way, one of them a hard dependency.

Now try to unit test your Foo class. You need to mock the BarService *and* your extra wrapper. You've added extra steps and complication that offer no additional value over wiring an object directly to its dependencies, and you've made the code less explicit and less maintainable.

A DIC doesn't have to be a huge complex affair like in Java. :-) Look into Pimple. It's the simplest DIC you'll find, and is readily understandable. It gets you all of the benefits of DI with a very simple configuration approach (just write code) that gives you all the benefits of your interstitial, with no downsides.

--Larry Garfield

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux