我想创建一些可更改的边界模块。理想情况下,结果看起来像任何其他模块,但行为可以在编译时或配置文件中设置。我想我正在寻找像erlang中的定义
假设我有一个SystemClock模块和一个DummyClock元组模块。理想情况下,Clock模块将是配置文件中选择的两个模块中的一个或另一个。
在config/test.ex
define(Clock, {DummyClock, 12345678})
后来
Clock.now
# => 12345678
在config/prod.ex
define(Clock, SystemClock)
后来
Clock.now
# => 32145687
答案 0 :(得分:1)
我认为最简单的方法是使用配置和Application.get_env/2
。
config/test.exs
中的
config :my_application, clock: DummyClock
<{1}}和config/dev.exs
中的
config/prod.exs
在使用时钟的代码中
config :my_application, clock: RealClock