2015-11-01 4 views
0

Я пытаюсь понять, что Stuart Sierra's component, в частности, соглашение об именах для компонентов, чтобы структурировать приложение Clojure.Clojure - составные части и названия

Если я смотрю в system, например, я вижу несколько компонентов, отображенные на ключ :server:

Поскольку оба используют тот же ключ :server, это значит что я могу использовать только один из них, если я использую эту библиотеку?

Аналогичным образом, я использую onyx. Несколько компонентов уже определены внутри onyx system.clj. Означает ли это, что некоторые ключи эффективно зарезервированы на onyx?

Что произойдет с параметром :port, который, по-видимому, используется многими компонентами в дикой природе?

Вопросы

  • Что получить разницу между клавишами, используемыми при assoc ИНГ в методе запуска и ключей, используемых в component/system-map?
  • Есть ли соглашение об именах для этих ключей, как мы можем избежать столкновений между этими ключами?
  • В каких случаях (если есть) имеет смысл иметь несколько систем и может ли они работать одновременно?

ответ

1

Ключи на системной карте определяют конкретные компоненты (экземпляры) в этой системе. Вы можете использовать любой ключ, который вам нравится, для любого компонента, который вам нужен.

Ключи в конкретной записи компонента может быть одна из трех вещей:

  1. значение конфигурации настройки во время создания
  2. некоторое внутреннее значение, которое не имеет никакого отношения к пользователю компонента
  3. (который будет ссылаться на другой компонент при запуске системы)

1 и 2 обычно устанавливаются конструктором компонента, и пользователям не нужно заботиться о t он фактический ключ, используемый в записи.

Зависимости настраиваются путем установки сопоставления зависимого компонента из ключа зависимостей (3) с ключом на системной карте, относящимся к компоненту зависимости. Это делается с помощью функции component/using и дает ей карту ключей компонентов для ключей системной карты в качестве второго аргумента. Таким образом, вы всегда можете сопоставить любой ожидаемый ключ с любым фактически используемым ключом. Вы можете использовать короткую форму component/using с вектором ключей, но только если ключи на системной карте совпадают с ключами в компоненте, который вы настраиваете.

Я надеюсь, что ответы на первые два вопроса

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

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

+0

Часть ключей ключей компонентов очистила от моего сознания туман. Какой из 1/2/3 являются ключами в моих ссылках на систему/{aleph, immutant}? Я предполагаю, что это (2), и что вы имеете в виду, что мне не нужно заботиться о ключах, установленных в записи, так как нет риска конфликта с другими записями? – nha

+1

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