PHP

The Right Way

Single 

Responsibility 

Principle 

Gracias

David Flores

Co-Mantainer at @DrupalConsole, Linux, Drupal, Symfony, Silex, BackEnd, Seguridad, Python, Open Source, Future Father ...sometimes #Nerd Speaker

david@indava.com

@dmouse

http://bit.ly/php-single-responsability-principle

Mil usos

WAT!

https://www.destroyallsoftware.com/talks/wat

The Uncle Bob

Robert C. Martin

Books

A class should have one, and only one, reason to exist.

Roles and Actors

So a responsibility is a family of functions that serves one particular actor. (Robert C. Martin)

<?php

namespace Catedral;

class Plomero implements PloneroInterface {

    public function __construct();

    public function reparaCalentador();

    public function instalaCalentador();
}

Source of Change

An actor for a responsibility is the single source of change for that responsibility. (Robert C. Martin)

<?php

namespace Catedral;

class Plomero implements PloneroInterface {

    public function __construct();

    public function reparaCalentador();

    public function instalaCalentador();

    public function instalaLavabo();
  
}
<?php

namespace Blog;

class Image 
{

    public function upload(Request $request) {

        foreach($request->files as $uploadedFile) {
            $name = $uploadedFile->getName();
            $file = $uploadedFile->move($directory, $name);
        }
        
    }

}

Feature 1 

<?php

namespace Blog;

class Image 
{

    public function upload(Request $request) {

        foreach($request->files as $uploadedFile) {
            $name = $uploadedFile->getName();
            $file = $uploadedFile->move($directory, $name);
        }
        
    }

    $this->sendEmail($file);

}

Feature 2

<?php

namespace Blog;

class Image 
{

    public function upload(Request $request) {

        foreach($request->files as $uploadedFile) {
            $name = $uploadedFile->getName();
            $file = $uploadedFile->move($directory, $name);
        }
        
    }

    $this->sendEmail($file);
    $this->sendTweet($file);

}

Feature 3

<?php

namespace Blog;

class Image 
{

    public function upload(Request $request) {

        foreach($request->files as $uploadedFile) {
            $name = $uploadedFile->getName();
            $file = $uploadedFile->move($directory, $name);
        }
        
    }

    $this->sendEmail($file);
    $this->sendTweet($file);
    $this->sendFacebook($file);

}

Feature 4

<?php

namespace Blog;

class Image 
{

    public function upload(Request $request) {

        foreach($request->files as $uploadedFile) {
            $name = $uploadedFile->getName();
            $file = $uploadedFile->move($directory, $name);
        }
        
    }

    $this->dispatch->dispatch(
        ImageEvents::AFTER_UPLOAD,
        new ImageEvent($file);
    );

}

Events

Reference

Single Responsability Principle in PHP

By David Flores

Single Responsability Principle in PHP

  • 1,635