О боже мой, еще один пост об инверсии управления Каждый более-менее опытный программист встречал в своей практике словосочетание «Инверсия управления».Теги: #php #IoC #инверсия управления #внедрение зависимостей #инверсия зависимостей #архитектура программного обеспечения #symfony 2 #yii 2 #Laravel #di #php #программирование #дизайн и рефакторингНо зачастую не все до конца понимают, что это значит, а тем более, как это правильно реализовать.
Надеюсь пост будет полезен тем, кто начинает знакомиться с инверсией управления и находится в некотором замешательстве.
Итак, согласно Википедии, инверсия управления — это принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах, основанный на следующих двух принципах:
Другими словами, можно сказать, что все зависимости модулей должны строиться на абстракциях этих модулей, а не на их конкретных реализациях.
- Модули верхнего уровня не должны зависеть от модулей нижнего уровня.
Оба должны зависеть от абстракции.
- Абстракции не должны зависеть от деталей.
Детали должны зависеть от абстракций.
Давайте посмотрим на пример.
Пусть у нас будет 2 класса — OrderModel и MySQLOrderRepository. OrderModel вызывает MySQLOrderRepository для получения данных из хранилища MySQL. Очевидно, что модуль более высокого уровня (OrderModel) зависит от относительно более низкого уровня MySQLOrderRepository. Ниже приведен пример плохого кода.
<Эphp class OrderModel { public function getOrder($orderID) { $orderRepository = new MySQLOrderRepository(); $order = $orderRepository->load($orderID); return $this->prepareOrder($order); } private function prepareOrder($order) { //some order preparing } } class MySQLOrderRepository { public function load($orderID) { // makes query to DB to fetch order row from table
-
Деньги Цифровой Эпохи
19 Oct, 24 -
Что Не Так С Методом Бейтса
19 Oct, 24 -
Блиц-Доклады На Рит-2008
19 Oct, 24 -
Альтернатива Программному Телефону
19 Oct, 24 -
Web 2.0 Для Построения Генеалогических Древ
19 Oct, 24