<div dir="ltr">Morning Hans,<div><br></div><div>I abstracted the interface out to a separate layer when I had to do this and set the chosen db as state in startup, so you'd have something like:</div><div><br></div><div>
my_interface:get_content/2 -> (State#state.db):get_content/2  -> my_db_mnesia:get_content/2</div><div>                                                                                          -> my_db_dynamo:get_content/2</div>
<div>                                                                                          -> my_db:get_content/2</div><div><br></div><div>hope this kind of help and along the right lines. </div><div><br></div><div>
Regards</div><div><br></div><div>Chris</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 9 August 2013 08:41, H.C. v. Stockhausen <span dir="ltr"><<a href="mailto:hc@vst.io" target="_blank">hc@vst.io</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I need a DB backend for my application but I'd like to be able to swap<br>
it out for different DBs if I choose so later on.<br>
<br>
I would like to code against an interface and tell the application<br>
what specific backend to use through config rather than code changes.<br>
<br>
Is there a pattern for doing that? Hot code upgrades and multi-node<br>
are not a real concern at this time - mostly, since I have no<br>
experience yet with either - however if doing it right means taking<br>
that into account too I'd also like to learn more about that.<br>
<br>
I am thinking of defining a custom behaviour ("my_crud" perhaps), then<br>
to implement it for various DBs and to also let a config driven<br>
adapter implement it that I then use to throughout the code to talk to<br>
the DB layer.<br>
<br>
For example, using Mnesia and AWS DynamoDB:<br>
<br>
- my_crud.erl (behaviour)<br>
- my_db_mnesia.erl (implements behaviour)<br>
- my_db_dynamo.erl (implements behaviour)<br>
- my_db.erl (configurable adapter that also implements behaviour)<br>
- my.config<br>
<br>
my_db:insert(Key, Value).<br>
<br>
Is that a reasonable approach that makes proper use of Erlang and<br>
behaviours or is this just not how one should do it?<br>
<br>
Thank you for any help & best regards,<br>
Hans<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div>