From e6c67c5da53e9bb7ab287ef13cc8c74fe26b9da7 Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Fri, 23 Sep 2016 10:12:59 +0200 Subject: [PATCH] PHP7 Dependency Injection --- .../DependencyInjection/AbstractConfig.php | 19 - .../DependencyInjection/ArrayConfig.php | 39 - Structural/DependencyInjection/Connection.php | 47 - .../DatabaseConfiguration.php | 54 + .../DatabaseConnection.php | 34 + Structural/DependencyInjection/Parameters.php | 26 - Structural/DependencyInjection/README.rst | 39 +- .../Tests/DependencyInjectionTest.php | 20 +- .../DependencyInjection/Tests/config.php | 3 - .../uml/DependencyInjection.uml | 58 +- Structural/DependencyInjection/uml/uml.png | Bin 12709 -> 43572 bytes Structural/DependencyInjection/uml/uml.svg | 998 ++++++++++-------- 12 files changed, 694 insertions(+), 643 deletions(-) delete mode 100644 Structural/DependencyInjection/AbstractConfig.php delete mode 100644 Structural/DependencyInjection/ArrayConfig.php delete mode 100644 Structural/DependencyInjection/Connection.php create mode 100644 Structural/DependencyInjection/DatabaseConfiguration.php create mode 100644 Structural/DependencyInjection/DatabaseConnection.php delete mode 100644 Structural/DependencyInjection/Parameters.php delete mode 100644 Structural/DependencyInjection/Tests/config.php diff --git a/Structural/DependencyInjection/AbstractConfig.php b/Structural/DependencyInjection/AbstractConfig.php deleted file mode 100644 index f2da4dc..0000000 --- a/Structural/DependencyInjection/AbstractConfig.php +++ /dev/null @@ -1,19 +0,0 @@ -storage = $storage; - } -} diff --git a/Structural/DependencyInjection/ArrayConfig.php b/Structural/DependencyInjection/ArrayConfig.php deleted file mode 100644 index f26c089..0000000 --- a/Structural/DependencyInjection/ArrayConfig.php +++ /dev/null @@ -1,39 +0,0 @@ -storage[$key])) { - return $this->storage[$key]; - } - - return $default; - } - - /** - * Set parameter. - * - * @param string|int $key - * @param mixed $value - */ - public function set($key, $value) - { - $this->storage[$key] = $value; - } -} diff --git a/Structural/DependencyInjection/Connection.php b/Structural/DependencyInjection/Connection.php deleted file mode 100644 index 1a5764c..0000000 --- a/Structural/DependencyInjection/Connection.php +++ /dev/null @@ -1,47 +0,0 @@ -configuration = $config; - } - - /** - * connection using the injected config. - */ - public function connect() - { - $host = $this->configuration->get('host'); - // connection to host, authentication etc... - - //if connected - $this->host = $host; - } - - /* - * Get currently connected host - * - * @return string - */ - - public function getHost() - { - return $this->host; - } -} diff --git a/Structural/DependencyInjection/DatabaseConfiguration.php b/Structural/DependencyInjection/DatabaseConfiguration.php new file mode 100644 index 0000000..51d72d7 --- /dev/null +++ b/Structural/DependencyInjection/DatabaseConfiguration.php @@ -0,0 +1,54 @@ +host = $host; + $this->port = $port; + $this->username = $username; + $this->password = $password; + } + + public function getHost(): string + { + return $this->host; + } + + public function getPort(): int + { + return $this->port; + } + + public function getUsername(): string + { + return $this->username; + } + + public function getPassword(): string + { + return $this->password; + } +} diff --git a/Structural/DependencyInjection/DatabaseConnection.php b/Structural/DependencyInjection/DatabaseConnection.php new file mode 100644 index 0000000..b5af8ba --- /dev/null +++ b/Structural/DependencyInjection/DatabaseConnection.php @@ -0,0 +1,34 @@ +configuration = $config; + } + + public function getDsn(): string + { + // this is just for the sake of demonstration, not a real DSN + // notice that only the injected config is used here, so there is + // a real separation of concerns here + + return sprintf( + '%s:%s@%s:%d', + $this->configuration->getUsername(), + $this->configuration->getPassword(), + $this->configuration->getHost(), + $this->configuration->getPort() + ); + } +} diff --git a/Structural/DependencyInjection/Parameters.php b/Structural/DependencyInjection/Parameters.php deleted file mode 100644 index c49f4c7..0000000 --- a/Structural/DependencyInjection/Parameters.php +++ /dev/null @@ -1,26 +0,0 @@ -`__. +directly in ``DatabaseConnection``, which is not very good for testing and +extending it. Examples -------- @@ -45,27 +38,15 @@ Code You can also find these code on `GitHub`_ -AbstractConfig.php +DatabaseConfiguration.php -.. literalinclude:: AbstractConfig.php +.. literalinclude:: DatabaseConfiguration.php :language: php :linenos: -Parameters.php +DatabaseConnection.php -.. literalinclude:: Parameters.php - :language: php - :linenos: - -ArrayConfig.php - -.. literalinclude:: ArrayConfig.php - :language: php - :linenos: - -Connection.php - -.. literalinclude:: Connection.php +.. literalinclude:: DatabaseConnection.php :language: php :linenos: @@ -78,11 +59,5 @@ Tests/DependencyInjectionTest.php :language: php :linenos: -Tests/config.php - -.. literalinclude:: Tests/config.php - :language: php - :linenos: - .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection .. __: http://en.wikipedia.org/wiki/Dependency_injection diff --git a/Structural/DependencyInjection/Tests/DependencyInjectionTest.php b/Structural/DependencyInjection/Tests/DependencyInjectionTest.php index 6df82a7..3749d57 100644 --- a/Structural/DependencyInjection/Tests/DependencyInjectionTest.php +++ b/Structural/DependencyInjection/Tests/DependencyInjectionTest.php @@ -2,24 +2,16 @@ namespace DesignPatterns\Structural\DependencyInjection\Tests; -use DesignPatterns\Structural\DependencyInjection\ArrayConfig; -use DesignPatterns\Structural\DependencyInjection\Connection; +use DesignPatterns\Structural\DependencyInjection\DatabaseConfiguration; +use DesignPatterns\Structural\DependencyInjection\DatabaseConnection; class DependencyInjectionTest extends \PHPUnit_Framework_TestCase { - protected $config; - protected $source; - - public function setUp() - { - $this->source = include 'config.php'; - $this->config = new ArrayConfig($this->source); - } - public function testDependencyInjection() { - $connection = new Connection($this->config); - $connection->connect(); - $this->assertEquals($this->source['host'], $connection->getHost()); + $config = new DatabaseConfiguration('localhost', 3306, 'domnikl', '1234'); + $connection = new DatabaseConnection($config); + + $this->assertEquals('domnikl:1234@localhost:3306', $connection->getDsn()); } } diff --git a/Structural/DependencyInjection/Tests/config.php b/Structural/DependencyInjection/Tests/config.php deleted file mode 100644 index 29d3683..0000000 --- a/Structural/DependencyInjection/Tests/config.php +++ /dev/null @@ -1,3 +0,0 @@ - 'github.com'); diff --git a/Structural/DependencyInjection/uml/DependencyInjection.uml b/Structural/DependencyInjection/uml/DependencyInjection.uml index e058b19..2434332 100644 --- a/Structural/DependencyInjection/uml/DependencyInjection.uml +++ b/Structural/DependencyInjection/uml/DependencyInjection.uml @@ -1,38 +1,20 @@ - - - PHP - \DesignPatterns\Structural\DependencyInjection\AbstractConfig - - \DesignPatterns\Structural\DependencyInjection\Connection - \DesignPatterns\Structural\DependencyInjection\ArrayConfig - \DesignPatterns\Structural\DependencyInjection\Parameters - \DesignPatterns\Structural\DependencyInjection\AbstractConfig - - - - - - - - - - - - - - - - - - - \DesignPatterns\Structural\DependencyInjection\AbstractConfig - - - Fields - Constants - Constructors - Methods - - private - - + + + PHP + \DesignPatterns\Structural\DependencyInjection\DatabaseConfiguration + + \DesignPatterns\Structural\DependencyInjection\DatabaseConnection + \DesignPatterns\Structural\DependencyInjection\DatabaseConfiguration + + + + + + + Methods + Constants + Fields + + private + + diff --git a/Structural/DependencyInjection/uml/uml.png b/Structural/DependencyInjection/uml/uml.png index 67e6ca16a3e83f345366009fa3fd92289f879f46..992d9a1d18512a56c0e92eae3c4c74c5d6464d21 100644 GIT binary patch literal 43572 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 D`FXOY diff --git a/Structural/DependencyInjection/uml/uml.svg b/Structural/DependencyInjection/uml/uml.svg index 78d603d..1e15816 100644 --- a/Structural/DependencyInjection/uml/uml.svg +++ b/Structural/DependencyInjection/uml/uml.svg @@ -1,425 +1,573 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - configuration - - - - - - - - - - host - - - - - - - - - - - - - __construct(config) - - - - - - - - - - - - - connect() - - - - - - - - - - getHost() - - - - - - - - - - - - - Connection - - - Connection - - - - - - - - - - - - - - - - - - - get(key, default) - - - - - - - - - - set(key, value) - - - - - - - - - - - - - ArrayConfig - - - ArrayConfig - - - - - - - - - - - - - - - - - - - get(key) - - - - - - - - - - set(key, value) - - - - - - - - - - - - - Parameters - - - Parameters - - - - - - - - - - - - - - - - - - - storage - - - - - - - - - - - - - __construct(storage) - - - - - - - - - - - - - AbstractConfig - - - AbstractConfig - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + configuration + + + + + + + + + + + + + + + + getDsn() + + + + + + + + + + + + + DatabaseConnection + + + DatabaseConnection + + + + + + + + + + + + + + + + + + + + + + configuration + + + + + + + + + + + + + + + + + + + getDsn() + + + + + + + + + + + + + DatabaseConnection + + + DatabaseConnection + + + + + + + + + + + + + + + + + + + + + + + + + password + + + + + + + + + + + + + + + + port + + + + + + + + + + + + + + + + host + + + + + + + + + + + + + + + + username + + + + + + + + + + + + + + + + getHost() + + + + + + + + + + + + + getPort() + + + + + + + + + + + + + getUsername() + + + + + + + + + + + + + getPassword() + + + + + + + + + + + + + DatabaseConfiguration + + + DatabaseConfiguration + + + + + + + + + + + + + + + + + + + + + + password + + + + + + + + + + + + + + + + port + + + + + + + + + + + + + + + + host + + + + + + + + + + + + + + + + username + + + + + + + + + + + + + + + + + + + getHost() + + + + + + + + + + + + + + + + getPort() + + + + + + + + + + + + + + + + getUsername() + + + + + + + + + + + + + + + + getPassword() + + + + + + + + + + + + + DatabaseConfiguration + + + DatabaseConfiguration + + +