After looking at the building blocks in the past chapter, we will now explore the fundamental aspects of any Elixir project. There are a few rules that need to be followed, but fortunately every one of them is simple to adopt and contributes to an understandable project structure. An application that doesn't get in the way of the evolution and maintenance tasks during all its years in production is a joy for the people who work with it, and this is exactly what we aim for.
We will start by learning what an Elixir application is and how we can structure an Elixir project, along with some of the existing good practices that you can leverage. We will introduce Umbrella applications and how they can help you to define more rigid boundaries between your project's components. When creating our umbrella project, we will use some common scaffolding mix tasks, which let you quickly create an Elixir project from scratch. Afterward, we'll talk about ElixirDrip, a polished web file server that we'll be developing along this journey. Since we are setting the foundations of our application, we will also establish some rules and best practices regarding code style, using Credo, and the new Elixir 1.6 code formatter.
In this chapter, you will learn the following topics:
What an Elixir application is
How to structure an Elixir project
Different ways of specifying project dependencies
What an umbrella project is and how it can help to structure your projects
Using mix new to quickly get new projects up to speed
Laying the foundations of ElixirDrip, the project we'll develop throughout this book
Defining behaviours, to allow different behaviour implementations
Using xref to understand the dependencies between your project files
Establishing a consistent code style with Credo and the Elixir formatter