27
loading...
This website collects cookies to deliver better user experience
Os princípios SOLID nos dizem como organizar as funções e estruturas de dados em classes e como essas classes devem ser interconectadas.
<?php
// Todo o código abaixo é somente um exemplo didático, ocultei boa parte da implementação para não ficar muito complexo.
class PostCreator
{
public function create()
{
try {
// Comunicação com a fila
$client = new SqsClient([
'profile' => 'default',
'region' => 'us-west-2',
'version' => '2012-11-05'
]);
// Resumi toda a implementação de listagem de dados para uma única linha
$messages = $result->get('Messages');
// Percorrendo os itens da fila
foreach ($messages as $message) {
// Lógica falsa de comunicação com o correios
$correios = new Correios();
$response = $correios->createPost($message);
// Lógica falsa de email
$email = new Email();
$email->send($message);
}
} catch (AwsException $e) {
error_log($e->getMessage());
}
}
}
Um módulo deve ter uma, e apenas uma, razão para mudar.
<?php
class PostHandler
{
public function handler()
{
$queue = SQSQueueReader();
$post = new PostCreator();
$email = new SenderEmail();
$messages = $queue->getMessage();
foreach ($messages as $message) {
$response = $post->create($message);
$email->send($message);
}
}
}
class SQSQueueReader
{
public function getMessage()
{
try {
$client = new SqsClient([
'profile' => 'default',
'region' => 'us-west-2',
'version' => '2012-11-05'
]);
// Resumi toda a implementação de listagem de dados para uma única linha
return $result->get('Messages');
} catch (AwsException $e) {
error_log($e->getMessage());
}
}
}
class PostCreator
{
public function create($message)
{
$correios = new Correios();
return $correios->createPost($message);
}
}
class SenderEmail
{
public function sender($body)
{
$email = new Email();
$email->send($body);
}
}
<?php
class Creator
{
private $conn;
private $validation;
public function __construct()
{
$this->conn = new Connection();
$this->validation = new Validation();
}
public function create($data)
{
$this->createDataAreValid($data);
}
public function createDataAreValid($data)
{
if ($this->validation->validate($data) {
// faz algo
}
$this->createIfEmailIsUnique($data);
}
public function createIfEmailIsUnique($data)
{
if ($this->conn->checkEmail($data['email')) {
// faz algo
}
$this->conn->save($data);
}
}
27