<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
syeedalireza / architecture-patterns-lab example snippets
use ArchitecturePatternsLab\CleanArchitecture\Application\UseCases\CreateOrder;
use ArchitecturePatternsLab\CleanArchitecture\Domain\Entities\Order;
use ArchitecturePatternsLab\CleanArchitecture\Infrastructure\Repositories\InMemoryOrderRepository;
// Infrastructure (outer layer)
$repository = new InMemoryOrderRepository();
// Application layer (use case)
$createOrder = new CreateOrder($repository);
// Execute use case
$order = $createOrder->execute([
'customer_id' => '123',
'items' => [
['product_id' => 'p1', 'quantity' => 2, 'price' => 29.99]
]
]);
use ArchitecturePatternsLab\HexagonalArchitecture\Domain\Order;
use ArchitecturePatternsLab\HexagonalArchitecture\Ports\OrderRepository;
use ArchitecturePatternsLab\HexagonalArchitecture\Adapters\PostgresOrderRepository;
// Primary Port (interface)
interface CreateOrderPort
{
public function create(array $data): Order;
}
// Domain Service implements Port
class OrderService implements CreateOrderPort
{
public function __construct(private OrderRepository $repository) {}
public function create(array $data): Order
{
$order = new Order($data);
$this->repository->save($order);
return $order;
}
}
// Secondary Adapter (infrastructure)
$repository = new PostgresOrderRepository($pdo);
$orderService = new OrderService($repository);
// Primary Adapter (HTTP Controller)
$order = $orderService->create($_POST);
use ArchitecturePatternsLab\OnionArchitecture\Core\Order;
use ArchitecturePatternsLab\OnionArchitecture\Services\OrderService;
use ArchitecturePatternsLab\OnionArchitecture\Infrastructure\OrderRepositoryImpl;
// Core domain
$order = Order::create('customer-123');
// Service layer
$orderService = new OrderService(
new OrderRepositoryImpl()
);
// Execute business workflow
$result = $orderService->placeOrder($order);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.