2014-02-07 4 views
0

Я пишу плагин для системы управления контентом, которая не использует контейнер ioc.php ioc container in plugin

Является ли хорошей практикой использовать мой собственный контейнер ioc, такой как Pimple в моем плагине, чтобы управлять всеми моими классами и т. Д., Хотя структура, которую мой плагин расширяет, не использует ее?

ответ

0

Я понимаю, что это старый вопрос, но здесь идет:

Это всегда хорошая практика, чтобы использовать IoC. Это помогает вам разделить создание объектов и их использование.

Вопрос больше похож: не так ли? Контейнер IoC должен знать обо всех случаях совместной работы, которые вам нужны, из CMS (в противном случае они будут создавать новые), поэтому вам нужно будет перечислить их все, прежде чем вы сможете запросить создание собственных объектов. Это может создать проблему.

Представьте, что у вас есть общий сценарий использования, когда вы используете одну общую зависимость от этой CMS. У вас также есть редкий случай, когда вы используете 10 других общих зависимостей, все из которых и создаются CMS. Чтобы эта инъекция работала, вам нужно будет добавить все 11 экземпляров зависимостей в IoC, хотя вам понадобится один раз большую часть времени, и, возможно, другие 10 никогда не были бы созданы (но теперь они есть, потому что вам нужны были примеры). Вы также не должны добавлять одну и ту же логику к зависимости, если у вас есть выбор экземпляра, потому что вы дублируете код, а также задание, которое вы хотите делегировать IoC.

В заключение, если ваш плагин сильно зависит от услуг singleton от CMS (обратите внимание: не одноэлементные шаблоны, а общие экземпляры), то вы не можете действительно эффективно это делать. Если вы можете получить доступ ко всем этим из общедоступной области (singleton pattern), вы можете это сделать, но тогда ваш плагин не будет тестироваться, и вы также убьете цель IoC.

Если вам разрешено создавать собственные зависимости от CMS, или вы на самом деле не зависите от него, или вы всегда используете каждую необходимую вам зависимость, вам хорошо идти, но все это редкие случаи использования.

Смежные вопросы