PHP Класс izzum\statemachine\AbstractFactory

It's based on the AbstractFactory pattern. To fully use polymorphism for all your statemachines, you should instantiate all your machines via factories. Full polymorphism allows you to build tooling that is the same for every statemachine you use in your program. The only thing you would need to do is instantiate the different factories to produce the different machines. The different sql backends provided store a fully qualified factory class name for a machine so you can instantiate factories dynamically. implement the abstract methods in a factory subclass specific to your problem domain. $factory = new MySpecificFactory($dependencies_injected_here); $machine = $factory->getStateMachine($order->getId()); $factory->add($machine->getInitialState()); $machine->run();
Автор: Rolf Vreijdenberger
Показать файл Открыть проект

Открытые методы

Метод Описание
getStateMachine ( string $id ) : StateMachine Factory method to get a correctly configured statemachine without creating all the default objects in application code.

Защищенные методы

Метод Описание
createAdapter ( ) : Adapter Returns an implementation of an Adapter class for the persistence layer
createBuilder ( ) : EntityBuilder Get a builder to build your domain objects
createContext ( Identifier $identifier ) : Context Factory method to get a configured Context with the default Builder and persistence adapter for a concrete statemachine type.
createLoader ( ) : izzum\statemachine\loader\Loader Gets the concrete Loader.
createMachine ( Context $context ) : StateMachine create a statemachine
getMachineName ( ) : string get the machine name for the machines that are produced by this factory.

Описание методов

createAdapter() абстрактный защищенный метод

Returns an implementation of an Adapter class for the persistence layer
abstract protected createAdapter ( ) : Adapter
Результат izzum\statemachine\persistence\Adapter

createBuilder() абстрактный защищенный метод

Get a builder to build your domain objects
abstract protected createBuilder ( ) : EntityBuilder
Результат EntityBuilder

createContext() защищенный метод

Factory method to get a configured Context with the default Builder and persistence adapter for a concrete statemachine type.
protected createContext ( Identifier $identifier ) : Context
$identifier Identifier
Результат Context

createLoader() абстрактный защищенный метод

A simple implementation might use the LoaderArray
abstract protected createLoader ( ) : izzum\statemachine\loader\Loader
Результат izzum\statemachine\loader\Loader An implementation of a Loader class (might be implemented on the persistence adapter)

createMachine() защищенный метод

create a statemachine
protected createMachine ( Context $context ) : StateMachine
$context Context
Результат StateMachine

getMachineName() абстрактный защищенный метод

will be used by the Identifier and Context
abstract protected getMachineName ( ) : string
Результат string

getStateMachine() публичный метод

TRICKY: When using this method it could lead to unoptimized creation of different builders/loaders/persistence objects. For example: a Loader can be reused, a databaseloader will only have to access a database once for a specific machine to get all the transitions. When using this method when inside a loop of some sorts where multiple statemachines for different entities are needed, it would be wise to cache/reuse the different loaders, builders and persistence adapters. php's spl_object_hash() method would be a good way to cache a fully loaded statemachine. Furthermore, once a Loader, ReferenceBuilder and Adapter for persistence have been instantiated, they can be cached in a field of this class since they can safely be reused and shared. Or just change the context on a machine to have access to all the same transitions, builders etc. of the machine.
public getStateMachine ( string $id ) : StateMachine
$id string the entity id for the Identifier
Результат StateMachine a statemachine ready to go