Инверсия Управления: Методы Реализации С Примерами На 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

Теги: #php #IoC #инверсия управления #внедрение зависимостей #инверсия зависимостей #архитектура программного обеспечения #symfony 2 #yii 2 #Laravel #di #php #программирование #дизайн и рефакторинг
Вместе с данным постом часто просматривают: