Tl;Dr: How to decouple the “web interface” from the “business logic” when a database is involved.
I watched the following talk from 2016 given by Lance Halvorsen https://www.youtube.com/watch?v=lDKCSheBc-8 about “Phoenix is not your application”.
I don’t know if this is something rather accepted in Elixir/Phoenix communities or if it’s only the thought of the speaker… But I couldn’t agree more with this statement.
Particularly coming from Rails where Rails is considered your application (to quote DHH)… Which I never really agree with that.
I even heard about not using at all Ecto within Phoenix apps (applying
--no-ecto) and letting a regular Elixir app taking care of the business logic. An example I heard is from the course Elixir for Programmers by Dave Thomas. But it seems (I didn’t took the course yet) that in this case the business logic doesn’t use a database.
And I somehow understand how the Phoenix web app will communicate with the Elixir “domain” app using OTP.
But, I wonder if this approach is still applicable to application that have a business logic that actually uses a database.
And so, if Ecto is intended to be used solely with Elixir? I mean without Phoenix…
Or put it in another way I want to know if Phoenix is doing a lot under the hood in using Ecto.
But I also took a look at the following talk from 2017 given by Chris McCord https://www.youtube.com/watch?v=tMO28ar0lW8 where he explains how Phoenix from 1.3 is distinguishing the web part (the web interface) from the logic/domain part.
So I wanted to ask you, Elixir/Phoenix folks, what’s the best approach you’ve experienced?
I’m asking this question in the context of an application that could become relatively large and complex regarding the logic/domain…
I’ve already had a bad experience with Rails working with large applications (very probably also because of a bad design too) and I really love the approach of having applications completely decoupled regarding the web interface and the business logic.
I hope this makes sense and I’m sorry if it’s rather confusing and also for the bad English…