2013-09-18 5 views
6

В настоящее время я создаю веб-приложение в php с использованием Laravel-4, однако я подозреваю, что этот вопрос применим и к другим языкам и фреймворкам.Когда использовать Фасады и когда устанавливать зависимости

Я читал об инъекции зависимостей и фасадах и понимал необходимую кодировку в каждом случае. Что я не понимаю, когда вы должны использовать один над другим?

Каковы преимущества/недостатки или просто причины использования либо инъекции зависимостей по шаблону проектирования фасадов?

Большое спасибо

ответ

2

Фасады используются для взаимодействия с классами проще читать и использовать. Это заставляет код казаться, что вы используете кучу статических методов для взаимодействия с классом, не создавая его, когда на самом деле вы вызываете методы на существующий объект.

Инъекционная инъекция используется, как следует из названия, вводить зависимости класса в класс. Это делается через конструктор. Вы вводите классы в другой класс, чтобы позволить классу использовать функциональность из введенных классов. Это становится мощным, когда вы начинаете вводить интерфейс в класс. Затем вы можете создать класс на основе интерфейса и ввести его в класс. Таким образом, если вам нужно изменить способ работы внедренного класса, вы можете создать новый класс на основе интерфейса и ввести его. Поскольку ваш код основан на инъецированном интерфейсе, он гарантирует, что класс, полученный инъекциями, будет продолжать работать без необходимости изменения.

Это наиболее примечательно в Laravel 4, если вы создаете репозиторий, основанный на интерфейсе для двигателя Eloquent. Вы можете ввести этот репозиторий в контроллер и использовать методы на интерфейсе, чтобы получить необходимую информацию. то если вы когда-нибудь захотите переключиться на что-то вроде Redis, все, что вам нужно сделать, это создать новый класс на основе этого интерфейса, который использует вместо этого Redis-движок, а затем ввести этот класс. Контроллер никогда не потребуется менять.

+0

Вы бы обернули хранилище на фасаде? –

+0

Лично, нет. Я думаю, вы могли бы, но это побеждает цель инъекции зависимости. Инъекционная инъекция делает ваш код более расширяемым, но он также делает его более легко проверяемым. Все, что вам нужно сделать, чтобы протестировать контроллер, - это ввести в него макет интерфейса, а затем выполнить ваши утверждения, как обычно. – searsaw