arch-atlas
Docs Atlas · Patterns Book

Patterns at a glance

Every folder tree and every architecture diagram from the docs, on one page. No prose. Use it as a flash-card deck while you're building.

4folder trees4diagrams3chapters
Chapter 01

Clean Architecture, deep dive

Open full chapter
rule

The dependency rule

One law, three letters

open

Dependency rule — arrows point inward

Presentation

widgets · cubits

  • MaterialApp
  • BlocBuilder
  • FeaturedBooksCubit

Domain

entities · use cases · repo contracts

  • BookEntity
  • BooksRepo
  • FetchFeaturedBooksUseCase

Data

models · sources · repo impl

  • BookModel
  • BooksRemoteDataSource
  • BooksRepoImpl
calls
center of the universe
implements

Domain sits in the middle and knows nobody. Presentation calls into Domain. Data implements Domain's contracts. Presentation never touches Data directly.

layers

Domain — what the app does

Entities · Repo contracts · Use cases

open

Layer stack — top to bottom

  1. Presentation

    What the user sees

  2. Domain

    What the app does

  3. Data

    How it talks to the world

  • lib/
    • core/
      • use_cases/shared
        • use_case.dartUseCase<T, Param> base
      • errors/
        • failure.dartabstract Failure
    • features/books/
      • domain/pure Dart
        • entities/
          • book_entity.dartthe noun
        • repos/
          • books_repo.dartabstract contract
        • use_cases/
          • fetch_featured_books_use_case.dartone verb
layers

Data — how the app gets and stores things

Models · Data sources · Repo impl

open
  • features/books/data/
    • models/
      • book_model.dartextends EntityfromJson + ?? fallbacks
    • data_sources/
      • books_remote_data_source.dartabstract + impl · throws
      • books_local_data_source.dartsync · Hive box
    • repos/
      • books_repo_impl.dartboundarythe only try/catch site
Chapter 02

One feature, end to end

Open full chapter
fetch

Data sources — cache empty, hit Gutendex

Frames 8-10

open

Data flow — one fetch, top to bottom

  1. 1

    Widget

    FeaturedBooksListView

  2. 2

    Cubit

    emit(Loading) → useCase → fold

  3. 3

    UseCase

    FetchFeaturedBooks(pageNumber)

  4. 4

    Repo (abstract)

    Future<Either<Failure, List<Book>>>

  5. 5

    Repo impl

    cache-first → catch → translate

  6. 6

    Data sources

    Hive (sync) · Dio (async)

Chapter 03

GetX modules done right

Open full chapter
shape

The module pattern

bindings · controllers · views

open

GetX module shape — one feature, three folders

Bindings

Get.lazyPut<Controller>(...)

Controller

GetxController + Rx state

View (responsive)

GetResponsiveView delegates

Views split by platform

phone
tablet
desktop
watch
  • lib/app/modules/articles/article/
    • bindings/
      • article_binding.dartGet.lazyPut<Controller>
    • controllers/
      • article_controller.dartGetxController + Rx state
    • views/
      • article_view.dartresponsive
      • phone/
      • tablet/
      • desktop/
      • watch/
shape

The generator script, modernised

bash generate_module.sh <name> → done in 5 seconds

open
  • lib/app/modules/favoris_car/generated
    • bindings/
      • favoris_car_binding.dartGet.lazyPut<FavorisCarController>
    • controllers/
      • favoris_car_controller.dartGetxController + Rx state + lifecycle
    • views/
      • favoris_car_view.dartresponsiveGetResponsiveView entry
      • widgets/view-local widgets
      • phone/
        • favoris_car_phone_view.dart
      • tablet/
        • favoris_car_tablet_view.dart
      • desktop/
        • favoris_car_desktop_view.dart
      • watch/
        • favoris_car_watch_view.dart