Какова цель главного модуля при создании нового проекта Mix?

Насколько я понимаю (и могу ошибаться, поскольку я новичок в Elixir), можно создать проект Mix для одного приложения с несколькими файлами .ex, каждый из которых содержит несколько модулей. И они могут использоваться друг в друге через псевдоним, импорт и т. Д.

Если это так, то какова цель «основного модуля» во время создания, неявно (имя проекта в верхнем регистре) или явно (например, mix new ... --module <modulename>)?

PS: Я понимаю, что для escripts требуется, чтобы в mix.exs был указан основной модуль, но это не то, о чем я говорю в своем вопросе (или я?).


person GuSuku    schedule 08.07.2019    source источник


Ответы (2)


Система Elixir может состоять из множества приложений, которые могут быть вашими собственными или сторонними приложениями, включая библиотеки. Думайте о приложении как о компоненте, о «ящике» связанного кода, на самом деле, многие библиотеки являются приложениями.

А в основном модуле вы размещаете все общедоступные функции, которые будут использоваться другими приложениями, другими словами, это общедоступный API для вашего приложения. Взгляните на некоторые библиотеки, такие как Jason, и вы увидите этот шаблон, например: https://github.com/michalmuskala/jason/blob/master/lib/jason.ex

Но если вы создаете приложение на основе Phoenix без распределенных приложений, у вас, вероятно, не будет кода в основном модуле, хотя я рекомендую вам прочитать https://hexdocs.pm/phoenix/contexts.html, который относится к этой теме и даст вам более глубокое понимание.

person Leandro Cesquini Pereira    schedule 08.07.2019

Насколько я понимаю, это просто тестовый пример модуля в вашем новом проекте. Однако во многих случаях имеет смысл сделать этот «основной модуль» границей API, через которую другой код Elixir взаимодействует с приложением.

person Brett Beatty    schedule 08.07.2019