IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

S.O.L.I.D

Són diversos patrons de disseny de codi .

S Single responsibility : quan prograem i definim una clase (POO) tenim que fer la clase sols ha de tindre UNA sola feina a fer.

O Open / Closed - El codi ha de poder ser extensible però no ha de permetre la seva modificacó. Una de les solucions que és fa es utiltizar : interfaces.

Exemple Laravel

Exemple S

Codi Inicial

Fitxer : SalesReporter.php

public function between($startDate ,$endDate)
{
// Perform authentification 

if (! Auth::check()) throw new Exception('Authentification required for reporting');

// Get sales from DB

$sales = $this->queryDBForSalesBetween($startDate, $endDate);

// return results

return this->format($sales);

public function queryDBForSalesBetween($startDate, $endDate)
{
return DB::table('sales')->whereBetween('created_at', [$startDate, $endDate])->sum('charge') / 100;
}

protected function format($sales)
{
return "<h1>Sales: $sales</h1>";
}

}

CODI FINAL

interface SalesOutputInterface{

    function output();
    
}
<?php namespace NT\Reporting;


class HtmlOutput implements SalesOutputInterface{

    public function output($sales)
    {

        return "<h1>Sales: $sales</h1>";
    }
    
}
public function between($startDate, $endDate, SalesOutputInterface $formatter)
{
    $sales = $this->repo->between($startDate, $endDate);

     return $formatter->output($sales);
}

Exercici STUPID CASE

Enllaç Github : https://github.com/Kraissus/solid_laravel

Requeriments

$ cd 
$ mkdir github && cd github 
$ laravel new solid_laravel
$ cd solid_laravel
$ git init

Creem un repositori dins de Github i configurem SSH :

$ git remote add origin [email protected]:kraissus/solid_laravel.git
$ git remote -v
$ git pull origin master
$ git status
$ git add .
$ git commit -a -m "First commit" 
$ git push origin master

Utilitzem homestead i afegim un mapeig nou

$ homestead edit

Afegim el següent contingunt al apartat de map

- map: solid_laravel.app
to: /home/vagrant/Code/solid_laravel/public

I en la BD :

- solidlaravel

Reprovision homestead:

$ vagrant global-status
id       name    provider   state   directory                                         
--------------------------------------------------------------------------------------
56fdd85  default virtualbox running /home/kraissus/.composer/vendor/laravel/homestead 

En el meu cas :

vagrant provision 56fdd85

Mirem si existeix la BD:

$ homestead ssh
$ ls /etc/nginx/sites-available/ | grep solid
solid_laravel.app
$ sudo mysql -psecret
> SHOW DATABASES;
> exit
$ exit

Dins de la màquina local editem el fitxer hosts i afegim la següent linea:

$ geany /etc/hosts
192.168.10.10 solid_laravel.app

Ara ja podem consultar l'adreça dins del navegador :

http://solid_laravel.app

Configurem l'app primer que tot modificant el nom :

$ php artisan app:name SolidLaravel

Configurem la BD del fitxer .env

$ cp .env.example .env

Editem el fitxer env :

DB_DATABASE=solidlaravel

Creem la BD amb el homestead agafant la nova configuració del fitxer .env :

$ homestead ssh
$ cd Code/solid_laravel/
$ php artisan migrate

Ara podem porbar de registrar un nou usuari dins de l'app :

http://solid_laravel.app/auth/register

Fem el commit i el push :

$ git status
$ git add .
$ git commit -a -m "Laravel configured"
$ git push origin master

Codi a solucionar

Conceptes

Injecció de dependencies = Afegir un objecte a un altre objece que ha de fer una cosa, com per exemple un objecte retorna unes dades de la BD, però necesita connectar-se a la BD per tant se li passa un objecte que fa la connexió.

Code Rot : Codi podrit - quan un codi fa " olor a problemes .

Fat Class : Classes que tenen moltes linies de codi o per exemple 2000 mètodes no aplica el principi de la S.

Vegeu també


Links Externs