PHP
Bounded Context пример на PHP
Bounded Context является ключевой концепцией в доменно-ориентированном проектировании (Domain-Driven Design, DDD), и он описывает логическую границу внутри которой определенный домен моделируется. В контексте программирования на PHP, bounded context может быть представлен как набор классов и функций, которые работают вместе для выполнения конкретной бизнес-функции или набора функций.
Давайте создадим пример двух ограниченных контекстов (bounded contexts) на PHP и покажем, как они могут взаимодействовать друг с другом.
1. Определение двух контекстов:
Контекст Заказов (Order Context):
namespace OrderContext {
class Order {
private $items = [];
private $status;
public function __construct() {
$this->status = 'new';
}
public function addItem($item) {
$this->items[] = $item;
}
public function getStatus() {
return $this->status;
}
public function completeOrder() {
$this->status = 'completed';
}
}
}
Контекст Доставки (Shipping Context):
namespace ShippingContext {
class Shipment {
private $order;
private $status;
public function __construct(\OrderContext\Order $order) {
$this->order = $order;
$this->status = 'pending';
}
public function shipOrder() {
if ($this->order->getStatus() === 'completed') {
$this->status = 'shipped';
// Логика для отправки заказа
}
}
}
}
2. Взаимодействие между контекстами:
Взаимодействие между этими двумя контекстами может быть реализовано следующим образом:
// Использование классов из разных контекстов
$order = new \OrderContext\Order();
$order->addItem('item1');
$order->completeOrder();
$shipment = new \ShippingContext\Shipment($order);
$shipment->shipOrder();
В этом примере:
- Создается объект `Order` в контексте Заказов.
- Заказ завершается, и его статус изменяется на 'completed'.
- Создается объект `Shipment` в контексте Доставки, который принимает объект `Order`.
- Вызывается метод `shipOrder` объекта `Shipment`, который проверяет статус заказа и изменяет свой статус на 'shipped', если заказ уже завершен.
Таким образом, контекст Доставки взаимодействует с контекстом Заказов, получая от него информацию и изменяя своё состояние в зависимости от состояния заказа.
Leave a reply