基于erlang中的配置参数启动依赖项

基于erlang中的配置参数启动依赖项,erlang,otp,Erlang,Otp,我的一些应用程序依赖项仅在设置了给定参数时使用。我需要知道启动这些依赖关系的最佳方法是什么。我使用的是Erlang R14B04,不能使用其他版本 我有两个选择。第一个: %% file myapp.erl start() -> dep1:start(), dep2:start(), application:start(myapp), case application:get_env(myapp, use_app3) -> true -

我的一些应用程序依赖项仅在设置了给定参数时使用。我需要知道启动这些依赖关系的最佳方法是什么。我使用的是Erlang R14B04,不能使用其他版本

我有两个选择。第一个:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp),
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.

start(Type, StartArgs) ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).
第二个例子:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp).

start(Type, StartArgs) ->
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

哪种方法是解决问题的最佳方法?

我认为第一种方法是更好的选择。start/0似乎关心启动相关应用程序,而start/2则启动当前应用程序的监控树

这是两个独立的关注点,因此将条件逻辑放在start/2中似乎会稍微弄脏您的代码


我注意到在第一个示例中,您正在启动自己的应用程序之后的第三个应用程序。在第二个示例中,您在启动自己的应用程序之前启动第三个应用程序。您的应用程序需要先执行哪些操作?

某些模块?还是一些应用程序?因为模块在任何时候都可用,无需任何启动。模块不是进程。应用程序。我编辑了这篇文章。