51
Software Design Patterns in Laravel 4 by Phill Sparks

Software Design Patterns in Laravel by Phill Sparks

Embed Size (px)

DESCRIPTION

Laravel makes use of quite a few well-established design patterns that promote reusable object-oriented code. Together, we will investigate the design patterns used in the core of Laravel 4 and discuss how they encourage reusable software.

Citation preview

Page 1: Software Design Patterns in Laravel by Phill Sparks

Software Design Patternsin Laravel 4

by Phill Sparks

Page 2: Software Design Patterns in Laravel by Phill Sparks

Credits

• Rosalind Goodall - Graphics

• Taylor Otwell - Laravel

Page 3: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

Page 4: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

• API Engineer at CrowdLab

Page 5: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

• API Engineer at CrowdLab

• From Leicester, UK

Page 6: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

• API Engineer at CrowdLab

• From Leicester, UK

• Climbing Instructor

Page 7: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

• API Engineer at CrowdLab

• From Leicester, UK

• Climbing Instructor

•Scout

Page 8: Software Design Patterns in Laravel by Phill Sparks

@PhillSparks

• API Engineer at CrowdLab

• From Leicester, UK

• Climbing Instructor

•Scout

• Laravel Core Team

Page 9: Software Design Patterns in Laravel by Phill Sparks

Laravel

• With Laravel since 1.5.9

• Core Team Member

• Past: Quality Team

• Now: Community engagement and support

Page 10: Software Design Patterns in Laravel by Phill Sparks

Laravel

• With Laravel since 1.5.9

• Core Team Member

• Past: Quality Team

• Now: Community engagement and support

• Dayle still owes me 9000 support points!

Page 11: Software Design Patterns in Laravel by Phill Sparks

Software Design PatternsEach pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.

-- Christopher Alexander, AIS+77

“ ”

Page 12: Software Design Patterns in Laravel by Phill Sparks

Software Design Patterns

Page 13: Software Design Patterns in Laravel by Phill Sparks

Software Design Patterns

Page 14: Software Design Patterns in Laravel by Phill Sparks

The Patterns

• Builder

• Chain of Responsibility

• Command

• Facade

• Factory

• Iterator

• Mediator

• Observer

• Presenter

• Repository

• Singleton

• Strategy

Page 15: Software Design Patterns in Laravel by Phill Sparks

Notations

Page 16: Software Design Patterns in Laravel by Phill Sparks

ClassNotations

Page 17: Software Design Patterns in Laravel by Phill Sparks

Sub-classNotations

Page 18: Software Design Patterns in Laravel by Phill Sparks

Abstract ClassNotations

Page 19: Software Design Patterns in Laravel by Phill Sparks

Class InstanceNotations

Page 20: Software Design Patterns in Laravel by Phill Sparks

ImplementationNotations

Page 21: Software Design Patterns in Laravel by Phill Sparks

Building Blocks

Page 22: Software Design Patterns in Laravel by Phill Sparks

Interfaces

namespace Illuminate\Auth;

interface UserInterface {

public function getAuthIdentifier();

public function getAuthPassword();

}

class GenericUser implements UserInterface {

Page 23: Software Design Patterns in Laravel by Phill Sparks

• 244 interfaces in Laravel (including vendors)

• 25 from Laravel Core

• 65 from Symfony

• 73 from Swiftmailer

Interface

Page 24: Software Design Patterns in Laravel by Phill Sparks

Abstract Classes

namespace Illuminate\Database\Eloquent\Relations;

abstract class Relation {

abstract public function addConstraints();

abstract public function getResults();

}

class BelongsTo extends Relation {

Page 25: Software Design Patterns in Laravel by Phill Sparks

Abstract Classes

• 128 abstract classes in Laravel (including vendors)

• 14 from Laravel Core

• 15 from Swiftmailer

• 40 from Symfony

Page 26: Software Design Patterns in Laravel by Phill Sparks

Iterator

Page 27: Software Design Patterns in Laravel by Phill Sparks

PHP’s Iterator Interface

Page 28: Software Design Patterns in Laravel by Phill Sparks

Laravel’s Iterators

• Collection

• Paginator

Page 29: Software Design Patterns in Laravel by Phill Sparks

Observer

Page 30: Software Design Patterns in Laravel by Phill Sparks

Dispatchernamespace Illuminate\Events;

Page 31: Software Design Patterns in Laravel by Phill Sparks

Dispatchernamespace Illuminate\Events;

class LoginHandler {

function handle($user) {

// do something with $data

}

}

Event::listen(‘user.login’, ‘LoginHandler’);

Event::fire(‘user.login’, $user);

Page 32: Software Design Patterns in Laravel by Phill Sparks

Singleton

Page 33: Software Design Patterns in Laravel by Phill Sparks

AliasLoadernamespace Illuminate\Foundation;

Page 34: Software Design Patterns in Laravel by Phill Sparks

Multiton

Page 35: Software Design Patterns in Laravel by Phill Sparks

DatabaseManagernamespace Illuminate\Database;

Page 36: Software Design Patterns in Laravel by Phill Sparks

Facade

Page 37: Software Design Patterns in Laravel by Phill Sparks

Facadenamespace Illuminate\Support\Facades;

Page 38: Software Design Patterns in Laravel by Phill Sparks

Inputnamespace Illuminate\Support\Facades;

Page 39: Software Design Patterns in Laravel by Phill Sparks

Routenamespace Illuminate\Support\Facades;

Page 40: Software Design Patterns in Laravel by Phill Sparks

Responsenamespace Illuminate\Support\Facades;

Page 41: Software Design Patterns in Laravel by Phill Sparks

Strnamespace Illuminate\Support;

Page 42: Software Design Patterns in Laravel by Phill Sparks

Facade vs Singleton

Page 43: Software Design Patterns in Laravel by Phill Sparks

Decorator

Page 44: Software Design Patterns in Laravel by Phill Sparks

BootstrapPresenternamespace Illuminate\Pagination;

Page 45: Software Design Patterns in Laravel by Phill Sparks

BootstrapPresenternamespace Illuminate\Pagination;

Page 46: Software Design Patterns in Laravel by Phill Sparks

Repository

• Examples:

• Illuminate\Cache\Repository

• Illuminate\Config\Repository

Page 47: Software Design Patterns in Laravel by Phill Sparks

Builder (aka Manager)

• Examples:

• Illuminate\Auth\AuthManager

• Illuminate\Cache\CacheManager

• Illuminate\Queue\QueueManager

• Illuminate\Session\SessionManager

Page 48: Software Design Patterns in Laravel by Phill Sparks

Factory

• Examples:

• Illuminate\Database\DatabaseManager

• Illuminate\Database\Connectors\ ConnectionFactory

• Illuminate\Validation\Factory

Page 49: Software Design Patterns in Laravel by Phill Sparks

Service Provider

• Core to Laravel’s IoC

• See Illuminate\Support\ServiceProvider

• Examples:

• Illuminate\Auth\AuthServiceProvider

• Illuminate\Hash\HashServiceProvider

• Illuminate\Log\LogServiceProvider

Page 50: Software Design Patterns in Laravel by Phill Sparks

Strategy

• Examples:

• Illuminate\Cache\StoreInterface

• Illuminate\Config\LoaderInterface

• Illuminate\Database - Builders & Grammars

• Illuminate\Translation\LoaderInterface

• Illuminate\View\ViewFinderInterface

Page 51: Software Design Patterns in Laravel by Phill Sparks

s/PhillSparks//