Slide 1

Slide 1 text

Dependency Inversion Principle @afnizarnur / @helmisatria / @knfalah / @miftahulawali Object Oriented Programming Design Principle April 17, 2017

Slide 2

Slide 2 text

Hello Dependency Inversion Principle April 17, 2017

Slide 3

Slide 3 text

What’s dependency? Dependency Inversion Principle April 17, 2017

Slide 4

Slide 4 text

and what’s inversion? Dependency Inversion Principle April 17, 2017

Slide 5

Slide 5 text

and again what’s principle? Dependency Inversion Principle April 17, 2017

Slide 6

Slide 6 text

Let’s hear the story Dependency Inversion Principle April 17, 2017

Slide 7

Slide 7 text

Dependency Inversion Principle April 17, 2017

Slide 8

Slide 8 text

So, Dependency Inversion Principle is… Dependency Inversion Principle April 17, 2017

Slide 9

Slide 9 text

Dependency Inversion Principle April 17, 2017 “High level objects should not depend on low level implementations”

Slide 10

Slide 10 text

Why using Dependency Inversion Principle? Dependency Inversion Principle April 17, 2017

Slide 11

Slide 11 text

Implement Dependency Inversion Principle and code example Dependency Inversion Principle April 17, 2017

Slide 12

Slide 12 text

Dependency Inversion Principle April 17, 2017 class PasswordReminder { private $dbConnection; public function __construct(MySQLConnection $dbConnection) { $this->dbConnection = $dbConnection; } }

Slide 13

Slide 13 text

Dependency Inversion Principle April 17, 2017 class PasswordReminder { private $dbConnection; public function __construct(MySQLConnection $dbConnection) { $this->dbConnection = $dbConnection; } } Low Level High Level

Slide 14

Slide 14 text

But that’s the bad example Dependency Inversion Principle April 17, 2017

Slide 15

Slide 15 text

“Depend on Abstraction not on concretions” Dependency Inversion Principle April 17, 2017

Slide 16

Slide 16 text

Dependency Inversion Principle April 17, 2017 class PasswordReminder { private $dbConnection; public function __construct(MySQLConnection $dbConnection) { $this->dbConnection = $dbConnection; } } Low Level High Level

Slide 17

Slide 17 text

PasswordReminder class is being forced to depend on the MySQLConnection class. Dependency Inversion Principle April 17, 2017

Slide 18

Slide 18 text

Your class should not care what class you’ll use ✌ Dependency Inversion Principle April 17, 2017

Slide 19

Slide 19 text

Dependency Inversion Principle April 17, 2017 interface DBConnectionInterface { public function connect(); }

Slide 20

Slide 20 text

The good example Dependency Inversion Principle April 17, 2017

Slide 21

Slide 21 text

Dependency Inversion Principle April 17, 2017 class MySQLConnection implements DBConnectionInterface { public function connect() { return "Database connection"; } } class PasswordReminder { private $dbConnection; public function __construct(DBConnectionInterface $dbConnection) { $this->dbConnection = $dbConnection; } }

Slide 22

Slide 22 text

“Depend on Abstraction not on concretions” Dependency Inversion Principle April 17, 2017

Slide 23

Slide 23 text

Conclusion Dependency Inversion Principle April 17, 2017

Slide 24

Slide 24 text

“Your code which can easily be extended, modified, tested, and refactored without any problems. ” Dependency Inversion Principle April 17, 2017

Slide 25

Slide 25 text

Thank you! Dependency Inversion Principle April 17, 2017