我的一些应用程序依赖项仅在给定参数设置时使用。我需要知道启动这些依赖项的最佳方法是什么。我正在使用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中似乎会弄脏你的代码。
我注意到在第一个例子中,你在你自己的应用程序之后启动第三个应用程序。在第二个例子中,你在你自己的应用程序之前启动第三个应用程序。你的应用程序需要先发生哪个?