Wake up Neo... Dependencies have you
-
Upload
ivan-mosiev -
Category
Technology
-
view
1.053 -
download
0
Transcript of Wake up Neo... Dependencies have you
![Page 1: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/1.jpg)
Ivan Mosiev —
software architect,
AltexSoft
http://verber.kh.ua
@polny_otec
![Page 2: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/2.jpg)
Wake up, Neo...
Dependencies have you
![Page 3: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/3.jpg)
Ideal world
![Page 4: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/4.jpg)
Ideal Unit
![Page 5: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/5.jpg)
Welcome to the real world
![Page 6: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/6.jpg)
Real Unit
Dependencies
![Page 7: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/7.jpg)
Imagine, there is no dependencies
![Page 8: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/8.jpg)
Imaginary Unit
Indirect Input
Indirect Output
![Page 9: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/9.jpg)
Indirect Input
$internal = $Dependency->something;
function dependency() { return $something; }
function dependency() { throw new Exception_WTF; }
function dependency(&$by_ref) { $by_ref++; }
![Page 10: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/10.jpg)
Indirect Output
$Dep->something = $internal;
$Dep->doSomething($internal);
![Page 11: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/11.jpg)
Stub
![Page 12: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/12.jpg)
Dummy
![Page 13: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/13.jpg)
Fake
![Page 14: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/14.jpg)
Spy
![Page 15: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/15.jpg)
Mock
![Page 16: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/16.jpg)
function runMatrix() {
$agents = array();
while (TRUE) {
$agents[] = new AgentSmith();
}
}
This is my world, my world!
![Page 17: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/17.jpg)
Dependency Injection
![Page 18: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/18.jpg)
Refactoring: step 0
function doSomething() {$auth = new Service();
…return $profit;
}
![Page 19: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/19.jpg)
Refactoring: step 1
private function getService() {return new Service();
}
function doSomething() {$service = $this->getService();…return $profit;
}
![Page 20: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/20.jpg)
Refactoring: step 2
private $_service;
private function getService() {If (!$this->_service)
$this->_service = new Service();return $this->_service;
}
function setService(IService $service) {$this->_service = $service;
}
![Page 21: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/21.jpg)
do { $the->same();
} while ($deps_count > 0);
![Page 22: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/22.jpg)
function getService() {
if (!$this->_service)
$this->_service = return Service();
return $this->_service;
}
![Page 23: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/23.jpg)
Inversion of Control
IoC Container store information about dependencies
Dependencies instantiated by Container recursively
Dependencies injected into Object by Service Container
![Page 24: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/24.jpg)
Benefits?
Mock and test everything
Loose coupling
Components reuse
![Page 25: Wake up Neo... Dependencies have you](https://reader033.fdocuments.net/reader033/viewer/2022042908/58f31cfe1a28ab46728b456d/html5/thumbnails/25.jpg)
Now you know kung fu