Last active
August 29, 2015 14:22
-
-
Save guilhermeblanco/78d190d5685cb8ddcc4a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use SimpleBus\Message\Bus\Middleware\MessageBusSupportingMiddleware; | |
use SimpleBus\Message\Handler\DelegatesToMessageHandlerMiddleware; | |
use SimpleBus\Message\Handler\Resolver\NameBasedMessageHandlerResolver; | |
use SimpleBus\Message\Name\NamedMessageNameResolver; | |
// Consider this is available | |
$pimple = new \Pimple(); | |
// Currently I need to do this: | |
$commandBus = new MessageBusSupportingMiddleware(); | |
$commandBus->appendMiddleware( | |
new DelegatesToMessageHandlerMiddleware( | |
new NameBasedMessageHandlerResolver( | |
new NamedMessageNameResolver(), | |
new CallableMap( | |
[ | |
'command_name' => 'whatever' // Keeping this list is wrong... =( | |
], | |
new ServiceLocatorAwareCallableResolver(function ($id) use ($pimple) { | |
return $pimple[$id]; | |
}) | |
) | |
) | |
) | |
); | |
/* | |
Issue here comes that now I need to keep a list of all command names and its resolved values somehow. | |
Problem relies that NameBasedMessageHandlerResolver signature enforces a MessageNameResolver (ok), | |
and a CallableMap (which is wrong. it should rely on CallableResolver). | |
By applying this change, the now reversed dependency (CallableMap => CallableResolver) would require minor changes, | |
but CallableResolver implementor could accept a CallableMap (or CallableCollection) and do an index based get. | |
*/ | |
// My better alternative here (to not keep the list) is to implement my own MessageHandlerResolver, | |
// but CallableResolver and Name namespaces are not useful (~50% of library's code). | |
// I can stretch the usage and force Name namespace to be used, but not a real reason for that... | |
// Example: | |
use SimpleBus\Message\Handler\Resolver\MessageHandlerResolver; | |
use SimpleBus\Message\Name\MessageNameResolver; | |
final class PimpleMessageHandlerResolver implements MessageHandlerResolver | |
{ | |
private $messageNameResolver; | |
private $pimple; | |
public function __construct(MessageNameResolver $messageNameResolver, \Pimple $pimple) | |
{ | |
$this->messageNameResolver = $messageNameResolver; | |
$this->pimple = $pimple; | |
} | |
public function resolve($message) | |
{ | |
$name = $this->messageNameResolver->resolve($message); | |
return $this->pimple[$name]; | |
} | |
} | |
$commandBus = new MessageBusSupportingMiddleware(); | |
$commandBus->appendMiddleware( | |
new DelegatesToMessageHandlerMiddleware( | |
new PimpleMessageHandlerResolver( | |
new NamedMessageNameResolver(), | |
$pimple | |
) | |
) | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use SimpleBus\Message\CallableResolver\CallableResolver | |
final class PimpleCallableResolver implemented CallableResolver | |
{ | |
private $pimple; | |
public function __construct(\Pimple $pimple) | |
{ | |
$this->pimple = $pimple; | |
} | |
public function resolve($name) | |
{ | |
return $pimple[$name]; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use SimpleBus\Message\Bus\Middleware\MessageBusSupportingMiddleware; | |
use SimpleBus\Message\Handler\DelegatesToMessageHandlerMiddleware; | |
use SimpleBus\Message\Handler\Resolver\NameBasedMessageHandlerResolver; | |
use SimpleBus\Message\Name\NamedMessageNameResolver; | |
// Consider this is available | |
$pimple = new \Pimple(); | |
// I should be able to do this: | |
$commandBus = new MessageBusSupportingMiddleware(); | |
$commandBus->appendMiddleware( | |
new DelegatesToMessageHandlerMiddleware( | |
new NameBasedMessageHandlerResolver( | |
new NamedMessageNameResolver(), | |
new PimpleCallableResolver($pimple) | |
) | |
) | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment