У меня есть такой сценарий:
Система обрабатывает бронирования из нескольких разных источников. Все заказы приходят в форме JSON с различными форматами для каждого источника. Некоторые атрибуты JSON присутствуют в одном JSON, а не в другом и т. Д.
Чтобы ввести резервирование в систему, я пытаюсь централизовать логику добавления резервирования в одном методе. Для этого я пытаюсь создать класс с именем Reservation, используя шаблон Builder следующим образом:
<?php
namespace App\Business\Classes\Reservation;
use App\Business\Classes\Utils\ReservationUtils;
/**
* Class Reservation
* Holds entire reservation details
* @package App\Business\Classes\Reservation
*/
class Reservation
{
protected $reference, $otaReference, $hotelCode, $customerId, $guestName, $couponId, $checkin, $checkout, $guests, $customerCountry,
$commissionRate, $paymentStatus, $commissionOta, $commissionDifference, $rooms = [], $cityTax, $vat, $serviceCharge, $geniusBooker = false,
$geniusAmount = 0, $taxes, $taxIncluded = false, $supplierAmount, $totalAmount, $specialRequest, $currency, $deviceType, $bookingSource,
$otaRefId, $status, $source, $remarks;
public function __construct()
{
// generates a reference
$this->reference = ReservationUtils::referenceGenerator();
}
/**
* @param mixed $otaReference
* @return Reservation
*/
public function setOtaReference($otaReference): Reservation
{
$this->otaReference = $otaReference;
return $this;
}
/**
* @param mixed $checkin
* @return Reservation
*/
public function setCheckin($checkin): Reservation
{
$this->checkin = $checkin;
return $this;
}
/**
* @param mixed $checkout
* @return Reservation
*/
public function setCheckout($checkout): Reservation
{
$this->checkout = $checkout;
return $this;
}
/**
* @param array $rooms
* @return Reservation
*/
public function setRooms(array $rooms): Reservation
{
$this->rooms = $rooms;
return $this;
}
// and so on....
}
И я бы использовал это так:
$data= json_decode($result->jsonData);
$reservation = (new Reservation())
->setOtaReference($data->otaReference)
->setCheckin($data->checkin)
->setCheckout($data->checkout); //...etc
Вероятно, это не использование в учебнике шаблона компоновщика в PHP или даже на Java, но есть ли в этом что-то не так?
Спасибо