AngularJS получает доступ к сервису в модуле, когда нет прямой зависимости

Я пытался оптимизировать то, как я управляю модулями в приложении разумного размера, и столкнулся с возможной проблемой с зависимостями.

Насколько я могу судить, модуль может получить доступ к сервису в другом модуле, даже если нет прямой зависимости.

Скажем, у нас есть модуль app, который зависит от двух модулей moduleA и moduleB. Правильно ли, что moduleB должен иметь доступ к зависимостям moduleA? Это то, что происходит в скрипке, которую я настроил - https://jsfiddle.net/neridum/jfdsjhjo/

Для меня это означает, что у вас может возникнуть проблема, связанная с тем, что если moduleA будет изменено, это может повлиять на moduleB, даже если они не являются зависимостями.

Возможно, я что-то неправильно понял или неправильно понял. Или это может быть ограничение системы модулей Angular.

Изменить: в Angular существует аналогичная проблема модуля в отношении конфликта имен - службы пространства имен в AngularJS. Я думаю, что это немного другая проблема, поскольку в дополнение к конфликту имен существует также проблема доступности модулей, когда они, возможно, не должны быть.


person Asta    schedule 20.03.2015    source источник
comment
Откуда вы знаете, как использовать SubModuleFactory в moduleB? Теоретически модули должны разрабатываться несколько отдельно друг от друга.   -  person Explosion Pills    schedule 20.03.2015
comment
@ExplosionPills Что, если модули A и B просто зависят от фабрик с одинаковыми именами в разных модулях? Пример, показывающий, что система не работает. Такое поведение модульной системы кажется довольно странным и неряшливым. По сути, это обратный поток через цепочку зависимостей.   -  person JLRishe    schedule 20.03.2015
comment
@ExplosionPills Рационально говоря, включение двух модулей в качестве зависимостей в третий модуль не должно приводить к тому, что они объединяют свои зависимости вместе (и, возможно, перезаписывают друг друга), но, по-видимому, именно это и происходит на самом деле.   -  person JLRishe    schedule 20.03.2015
comment
Можете считать это ошибкой. См.: stackoverflow.com/questions/14909474/   -  person Explosion Pills    schedule 20.03.2015
comment
@ExplosionPills Спасибо за ссылку. Я думаю, что этот вопрос можно рассматривать как дубликат этого. Кому ОП: Да, как говорится в ответах на другие вопросы, это правда, что имена в службах и т. д. объединены вместе в сети зависимостей, и если у вас есть основания полагать, что это может стать проблемой, предлагаемое решение использовать префикс в именах ваших сервисов, для их пространства имен.   -  person JLRishe    schedule 20.03.2015
comment
Спасибо за ссылки. Я думаю, что это немного другая проблема, хотя она связана с проблемой пространства имен. Вариант использования здесь заключается в том, что у меня есть служебный модуль, от которого могут зависеть несколько других модулей. Было бы слишком легко забыть зависимость, что было бы проблемой, если бы модуль, объявляющий зависимость, был удален.   -  person Asta    schedule 22.03.2015


Ответы (1)


Оба модуля должны действовать независимо, не должно быть необходимости обращаться к другим зависимостям.

person Rj-s    schedule 20.03.2015
comment
Нет, им не нужно обращаться к зависимостям друг друга, но Angular делает так, что они могут получать доступ к зависимостям друг друга (и даже перезаписывать их). Это проблема. - person JLRishe; 20.03.2015
comment
Да, у меня проблема в том, что одна из зависимостей — это служебная служба, которую я хотел лучше разделить на модули. У него есть методы, которые используются в нескольких разных модулях, что и привело меня к моей проблеме. В настоящее время это служба на основном модуле. - person Asta; 22.03.2015