Arquitetando sistemas
PHP utilizando boas
práticas de engenharia de
software
SEMANA DE INFORMÁTICA
EDUARDO CESAR
ARQUITETO DE SOFTWARE - ZARP
Software architecture research investigates
methods for determining how best to partition a
system, how components identify and
communicate with each other,how information is
communicated, how elements of a system can
evolve independently
ARQUITETURA DE
SOFTWARE
E
NEGÓCIO
LINGUAGEM UBÍQUA
ARQUITETURA EM CAMADAS
CONTEXTOS DELIMITADOS
ANTI-CORRUPTION LAYER
ENTENDENDO ARQUITETURA DE SOFTWARE
DE DENTRO PARA FORA
PADRÕES
ARQUITETURA EM CAMADAS
A criação de camadas é
uma das técnicas mais
comuns que os projetistas
de software usam para
quebrar em pedaços um
sistema complexo de
software...
Apresentação
Negócio
Persistência
Meios de comunicação
PROTOCOLOS
SÍNCRONOS OU ASSÍNCRONOS
WEB APPLICATIONS
Adotam algum modelo de arquitetura
em camadas, usualmente
MVC
MODEL
VIEW CONTROLLER
<?php
namespace AppModel;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
}
<?php
namespace AppHttpControllers;
use AppModelUser;
use AppHttpControllersController;
class UserController extends Controller
{
public function show()
{
return view('user.profile', ['users' => User::all()]);
}
}
<html>
<body>
<h1>Users</h1>
<?php
foreach ($users as $user)
{
echo $user->name;
}
?>
</body>
</html>
Manipulação de dados
ORM’s
Active Record
Data Mapper
Active Record
<?php
namespace AppModel;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $table = ‘user’;
}
$user = new User();
$user->name = ‘Eduardo’;
$user->save();
$users = $user->all();
$user = $user->find(1);
Data Mapper
<?php
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
* @ORMTable(name="products")
*/
class User
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue
*/
public $id;
/**
* @ORMColumn(type="string")
*/
public $name;
}
<?php
$entityManager = EntityManager::create($conn, $config);
$user = new User();
$user->name = ‘Eduardo’;
$entityManager->persist($user);
$entityManager->flush();
$id = 1;
$user = $entityManager->find('User', $id);
$userRepository = $entityManager->getRepository('User');
$user = $userRepository->findAll();
WEB API
Também podem adotar algum modelo
arquitetural em camadas, mas o principal ponto
é na exposição de um serviço,
que pode ser feita via RPC ou REST
E se minha web application ou
web api precisar ser assíncrona?
MENSAGERIAS
FILAS
TÓPICOS
Para o LARAVEL
Para o SYMFONY
REAL TIME
AUTENTICAÇÃO E AUTORIZAÇÃO
LOGS
GERENCIE SUAS DEPENDÊNCIAS
OBRIGADO A TODOS!
EDUARDO CESAR
github.com/bolinha1
/in/eduardo-cesar-oliveira
eduardo.oliveira@zarpsystem.com.br
www.zarpsystem.com.br
ESTAMOS CONTRATANDO!!!

Arquitetando aplicações php