我有一段erlang代碼,它應該從db讀取一些值並應支持幾個dbs。我想我的代碼在某種程度上不依賴於數據庫,所以我實現了兩個不同的gen_servers,它們都使用相同的原子(db_handler)註冊。我決定應該從閱讀.app文件開始閱讀哪個版本。在erlang中隱藏通用接口背後的不同實現
兩個gen_servers暴露共同handle_call,所以我可以在我的應用程序像其他部分使用:
gen_server:call(db_handler, {do_something, "value1", "value2"})
這工作,但仍然強烈耦合到一個事實,即每未來實現對於新的數據庫應該是gen_server。
我正在考慮使用!運算符並處理handle_info中的命令,但我仍然認爲可能有更好的解決方案(可能會通過另一個模塊?)。
有人可以給我一些更好的方式來處理erlang中這樣的事情的見解嗎?
這仍然需要每個實現有自己的gen_server進程,不過,對不對? –
否,約束條件是每個接口函數的實現具有相同的「合同」:相同的參數列表,相同的返回值。 – Pascal