Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Highlights from the Flare codebase (laracon AU)

Highlights from the Flare codebase (laracon AU)

Freek Van der Herten

October 31, 2019
Tweet

More Decks by Freek Van der Herten

Other Decks in Technology

Transcript

  1. About me
    Freek Van der Herten
    Partner & developer at Spatie
    @freekmurze
    freek.dev
    flareapp.io
    ohdear.app

    View full-size slide

  2. Open source stats
    ± 250 packages on Packagist
    ± 50,000,000 total downloads
    ± 3 000,000 downloads a month
    spatie.be/open-source/packages

    View full-size slide

  3. Highlights from
    the Flare codebase

    View full-size slide

  4. A way to structure
    a large Laravel app

    View full-size slide

  5. Take a look at the Flare codebase
    Not a sales talk
    Techniques you can use in your own projects
    Opinionated

    View full-size slide

  6. Short walkthrough of the UI
    Domains
    Inertia / React / TypeScript

    View full-size slide

  7. Let's take a look
    at Flare

    View full-size slide

  8. Using domains

    View full-size slide

  9. Using domains
    Term taken from DDD
    A sphere of knowledge
    Grouping code
    Larger projects

    View full-size slide

  10. Refactor to domains
    app/
    ├── Models/
    │ ├── User.php
    │ ├── Team.php
    │ └── Project.php
    ├── Mails/
    │ ├── Welcome.php
    │ ├── InvitedToTeam.php
    │ └── ApiKeyRegenerated.php
    └── Events/
    ├── UserDeleted.php
    └── Project.php

    View full-size slide

  11. Refactor to domains
    app/
    └── Domain/
    ├── Team
    └── Project

    View full-size slide

  12. Show me the code

    View full-size slide

  13. Front end
    “I strongly believe JavaScript is a requirement for excellent user
    experiences. Not good experiences, excellent experiences.”
    —Seb

    View full-size slide

  14. Front end: JavaScript
    Inertia
    Built by Jonathan Reinink
    Replace Blade by React (or Vue or whatever)
    Makes server client communication seamless
    No full pages refreshes

    View full-size slide

  15. public function index(Team $team)
    {
    return view('team.settings', collect('team'));
    }

    View full-size slide

  16. public function index(Team $team)
    {
    return inertia()->render('team.settings', collect('team'));
    }

    View full-size slide

  17. Using domains
    stitcher.io/blog/laravel-beyond-crud-01-domain-oriented-laravel
    freek.dev/1371-refactoring-to-actions
    freek.dev/1433-supercharging-common-controllers

    View full-size slide

  18. Front end
    inertiajs.com
    typescriptlang.org
    freek.dev/1391-how-to-handle-front-end-authorization-using-
    laravel-inertia-and-typescript

    View full-size slide

  19. Thank you!
    speakerdeck.com/freekmurze/highlights-flare-codebase
    spatie.be/open-source
    freek.dev
    flareapp.io
    ohdear.app

    View full-size slide