在elixir中命名嵌套伞应用程序

时间:2015-09-29 07:37:32

标签: elixir otp

伞形应用程序的行为与混合设置的普通应用程序非常相似。它们具有配置,可以作为一个整体启动。因此,随着应用的增长,应用可以扩展到伞式应用。我现在已经遇到了这样的情况,我想将一个伞形应用程序定义为一个更大的伞应用程序中的一个应用程序。

有没有充分的理由不这样做?

还有一种命名空间应用程序的方式/约定吗? 例如

def project do
    [app: :"analytics.web",
     version: "0.0.1",
     deps_path: "../../deps",
     lockfile: "../../mix.lock",
     elixir: "~> 1.0",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

1 个答案:

答案 0 :(得分:3)

运行时中的Erlang和Elixir应用程序具有平面命名空间。他们可以相互依赖,创建一个像依赖图一样的树。

Ubarla项目(不是应用程序,因为没有单一"应用程序")在Rebar和Mix中主要是为了避免为几个相关和/或相互依赖的应用程序提供单独的存储库。

即使Rebar和Mix支持嵌套的伞状项目,我也会说它只是混淆了普通应用程序的结构。你假装有一个嵌套的命名空间,但没有。

在应用程序名称中使用点也不是最好的主意,因为它们在Erlang('analytics.web')和Elixir(:"a.b")中都有问题。

我只会使用一个具有多个相互依赖的应用程序的伞形项目:

.
├── README.md
├── apps
│   ├── analytics
│   ├── analytics_stats
│   ├── analytics_web
│   ├── other_a
│   ├── other_b
│   └── ...
├── config
│   └── config.exs
└── mix.exs
```