One of the tips I got from a programmer I look up to is that they studied a codebase and reverse-engineered how they made each decision.
In your opinion, what is the best Elixir codebase to study and why?
One of the tips I got from a programmer I look up to is that they studied a codebase and reverse-engineered how they made each decision.
In your opinion, what is the best Elixir codebase to study and why?
For the essentials you can take a look in to the Elixir Github Repo.
Or take a look here: Elixir Examples - Feedback Wanted
Or, if you also interested in Phoenix:
Are Hex.pm and Constable code bases considered good practice examples for building applications? .
Phoenix (wiki) section “Example Applications”
Good example project using Ecto.
Take a look at Captain Fact which is an elixir umbrella app in production.
For a full featured app there’s ExVenture - Text based MMORPG I just heard about it thanks to the Elixir Wizards - Betweenisode.
Thank you all! The ExVenture was more what I was thinking off… I’m trying to study good patterns for building Elixir Phoenix apps.
Please keep your suggestions coming!
I will go slightly out of topic here. If you’re just starting out I would suggest that you go for the documentation; Elixir docs work like a really well explained guide from which then you can branch your own patterns.
Just in case you haven’t tried the “embedded docs” try to use the h
function in iex
you can “query” any module or function in your project:
shell$ iex
Interactive Elixir (1.10.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> h Enum
Enum
Provides a set of algorithms to work with enumerables.
To understand how a Phoenix (or any) application is structured I would suggest that you understand how “Supervised Applications” work. You can quickly create one with:
$ mix new game_of_life --sup
The --sup
option will generate an additional application.ex
file. Then go and read the docs for GenServer, Supervisor, Application (which you can also check with h Genserver
at iex
).
These generators are really well thought, for a very classic MVC style try:
shell$ mix help phx.gen.html
shell$ mix help phx.gen.json
Run a generator and try to follow how all your web directory is intertwined; you can start with the the endpoint.ex
or your router.ex
then go to specific views or controllers; a lot might seem hidden or “magical” because Phoenix leans a lot of boilerplate into macros, but the project structure gets to become very simple with the pass of time