Slide 1

Slide 1 text

Dependency Injection

Slide 2

Slide 2 text

Konzept

Slide 3

Slide 3 text

Statt dem hier:

Slide 4

Slide 4 text

public function __construct() { $this->dep1 = new Dependency1(); $this->dep2 = new Dependency2(); $this->dep3 = new Dependency3(); }

Slide 5

Slide 5 text

… nimmt man das da:

Slide 6

Slide 6 text

public function __construct( DependencyInterface1 $dep1, DependencyInterface2 $dep2, DependencyInterface3 $dep3) { $this->dep1 = $dep1; // ... }

Slide 7

Slide 7 text

Das ist alles.

Slide 8

Slide 8 text

Warum?

Slide 9

Slide 9 text

Separation of concerns

Slide 10

Slide 10 text

Testbarkeit

Slide 11

Slide 11 text

Übersichtlichkeit

Slide 12

Slide 12 text

Praxis

Slide 13

Slide 13 text

Wer braucht schon ein Framework?

Slide 14

Slide 14 text

class DoctrineEntityManagerBuilder { public static function build() { $config = new Configuration(); $config->setFoo("bar"); $connOpts = array( "driver" => "pdo_sqlite", "path" => "database.sqlite" ); return EntityManager::create( $connOpts, $config ); } }

Slide 15

Slide 15 text

Wildwuchs vermeiden

Slide 16

Slide 16 text

class DoctrineEntityManagerBuilder { private static $instance; public function build() { if (empty(static::$instance)) { // ... static::$instance = EntityManager::create( $connOpts, $config ); } return static::$instance; } }

Slide 17

Slide 17 text

Symfony2 ServiceContainer

Slide 18

Slide 18 text

Service?

Slide 19

Slide 19 text

class DataImporter { private $em; Private $sourceUrl; public function __construct( EntityManager $em, $sourceUrl) { $this->em = $em; $this->sourceUrl = $sourceUrl; } public function import() { // ... } }

Slide 20

Slide 20 text

DataImporter %dataimporter.source_url%

Slide 21

Slide 21 text

class MyExtension extends Extension { public function load(...) { $loader = new XmlFileLoader(...); $loader->load('services.xml'); // Konfiguration auslesen // und in Container einfügen } public function getAlias() { return "my_extension"; } }

Slide 22

Slide 22 text

class MyController extends Controller { public function importAction() { $importer = $this->get("dataimporter"); $importer->import(); // ... } }

Slide 23

Slide 23 text

Fragen?