PHP desacoplado? É o futuro, é agora!!! Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 2 anos, 6 meses, 1 semana, 1 dia atrás.

O PHP caminha cada dia mais para componentes especializados em resolver um problema único do que para grandes frameworks com recursos que tentam de salvar de tudo, você deveria ter o direito a escolher um ORM ou DAL diferente do Eloquent ou o Cake\ORM simplesmente por preferir assim. Mas a coisa caminha a passos largos (para nossa alegria).

"E a interoperabilidade entre frameworks significa trabalhar em conjunto por meio de interfaces, autoloading e estilos de codificação."

Josh Lochhart - PHP Moderno

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

O que são componentes?

Componentes são bibliotecas de código que resolvem um único problema, o Monolog por exemplo, simplesmente fantástico no que se diz respeito a logging, apenas isso.

Componentes podem ter várias classes e serem mais complexos ou muito simples, com uma única classe de poucas linhas, o que interessa é que ele resolve um problema exclusivo, e com isso você ganha em manutenibilidade e testes (é muito mais fácil manter uma lib pequena do que um framework inteiro, né).

Pense, dificilmente você vai escrever mais código para um sistema de upload ou MVC do que existe em um sistema completo.

E pra frisar bem, se você criar um componente para seu MVC, lembre-se que as rotas são outro assunto, então é outro componente, as views são outro componente, o seu ORM é outro, enfim.

Existem muitas outras vantagens em desenvolver pequenos componentes ao invés de aplicações inteiras, mas este post iria crescer muito.

Aonde começa o desacoplamento?

O desacoplamento começa exatamente nos seus objetos, um componente bem desenvolvido começa com uma interface simples, interfaces são uma das 3 colunas as quais o PHP está se estabelecendo, as outras são autoloading e estilos de código.

Uma classe não deve instanciar outra dentro de si mesma (Dependency inversion, o D do SOLID), ao invés disso ela deve informar que vai usar uma interface.

O que é uma interface afinal de contas!

Ouço muito essa:

Interface é um contrato que temos entre as classes

Em outras palavras, uma interface não tem código algum, ela apenas diz o que uma classe deve implementar (quais métodos e atributos, ela terá).

Uma interface para uma classe que retorna uma mensagem se pareceria com

<?php

namespace WebDevBr\Blog;

interface MessageInterface
{
    public function setText($txt);
    public function __toString();
}

É claro que é um exemplo simples, mas agora temos um contrato explicito que diz exatamente o que nossa classe deve ter, não importa o código que tem ali, devemos criar estes métodos para  tudo funcionar.

<?php

namespace WebDevBr\Blog;

class HelloWorld
{

    public $message;

    public function setMessageInterface(MessageInterface $message)
    {
        $this->message = $message;
        return $this;
    }

    public function getMessage()
    {
        return $this->message;
    }
}

Não importa o código que será usado na nossa classe, o que importa é que ela implemente a interface para ser aceita pela HelloWorld.

<?php

include 'vendor/autoload.php';

$message = new WebDevBr\Blog\Message;
$message->setText('Hello World!!!');

$helloWorld = new WebDevBr\Blog\HelloWorld;
$helloWorld->setMessageInterface($message);
echo $helloWorld->getMessage();

Então agora podemos criar quantas classes quisermos com a interface que elas serão aceitas.

Quer um exemplo mais prático? Veja a PSR-3, que nada mais é que uma interface de logging que é, inclusive, implementada pelo já citado Monolog.

Aqui mais sobre interfaces.

E como gerenciar meus componentes?

Em uma palavra? Composer!

O processo é simples, você cria um componente e envia para o Github, na sequência carrega no Packagist e pronto, só adicionar no seu composer.json, mas calma, se não entendeu nada eu tenho um curso sobre isso.

O que devo estudar para desenvolver bons componentes?

Você pode estudar um pouco sobre SOLID, eu ainda não tenho nada sobre isso, mas atualizo aqui assim que tiver.

Outro material legal é a série sobre Composer do meu amigo Andre Cardoso e o curso de Git aqui do WebDevBr (free).

Quem sabe você não cria um componente bacana que fica famoso e conta pra todo mundo que o caminho das pedras foi encontrado aqui.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!