Slide 1

Slide 1 text

Applying the Rules of Simple Design @adamwathan

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

“I don’t really see the difference. Whether you have two elements in a statement, or two services in some distributed architecture, the principles are the same.” — Kent Beck

Slide 10

Slide 10 text

The Rules of Simple Design 1. Passes the tests 2. Reveals intent

Slide 11

Slide 11 text

class SalesReport { public function __construct($sales, $startDate, $endDate) { $this->sales = $sales; $this->startDate = $startDate; $this->endDate = $endDate; } public function totalRevenue() { $revenue = 0; foreach ($sales as $sale) { if ($sale->date >= $this->startDate && $sale->date <= $this->endDate) { $revenue += $sale->value; } } return $revenue; } }

Slide 12

Slide 12 text

class SalesReport { // ... public function totalRevenue() { $revenue = 0; foreach ($sales as $sale) { if ($this->saleWithinRange($sale)) { $revenue += $sale->value; } } return $revenue; } private function saleWithinRange($sale) { return $sale->date >= $this->startDate && $sale->date <= $this->endDate; } }

Slide 13

Slide 13 text

The Rules of Simple Design 1. Passes the tests 2. Reveals intent 3. No duplication

Slide 14

Slide 14 text

belongsTo(Author::class); } }

Slide 15

Slide 15 text

{{ $book->title }}

by {{ $book->author->name }}
{{ $book->summary }}

Slide 16

Slide 16 text

    @foreach ($books as $book)
  • {{ $book->title }}

    by {{ $book->author->name }}
  • @endforeach

Slide 17

Slide 17 text

belongsToMany(Author::class); } public function byline() { return $this->authors->pluck('name')->implode(' & '); } }

Slide 18

Slide 18 text

{{ $book->title }}

by {{ $book->byline() }}
{{ $book->summary }}

Slide 19

Slide 19 text

    @foreach ($books as $book)
  • {{ $book->title }}

    by {{ $book->byline() }}
  • @endforeach

Slide 20

Slide 20 text

The Rules of Simple Design 1. Passes the tests 2. Reveals intent 3. No duplication 4. Fewest elements

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Slide 23

Slide 23 text

vs. class TagsController { public function store() { Tag::create(Request::all()); return Redirect::route('tags.index'); } }

Slide 24

Slide 24 text

Stop worrying about ARCHITECTURE

Slide 25

Slide 25 text

Focus on the SMALL STUFF

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

<< Insert live code demo here >> https://github.com/adamwathan/simple-design-ssphp16/tree/ssphp-start

Slide 28

Slide 28 text

@adamwathan adamwathan.me https://joind.in/talk/b0f5a