por AbdElKader Bouadjadja [email protected]
Esta API le permite ordenar sus tarjetas de embarque desordenadas.
Cree la imagen de la ventana acoplable y ejecútela para convertirla en un contenedor:
docker build -t medinae/journey .
docker run medinae/journey
1 . Cargue los objetos de las tarjetas de embarque a partir de sus datos de entrada válidos:
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2 . Pase sus tarjetas de embarque a un nuevo objeto de viaje. También puede inyectar su clasificador específico que implemente BoardingCardLoaderInterface. De forma predeterminada, se utilizará el clasificador existente.
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3 . Obtenga sus tarjetas de embarque solicitadas (NOTA: el método toString también se implementa si desea mostrar la información del viaje en un formato legible por humanos):
$ trip -> getOrderedBoardingCards ();
4 . Disfrutar !
Puede crear algunos objetos de tarjeta de embarque nuevos implementando BoardingCardInterface. Tenga cuidado, si desea que el clasificador API pueda ordenar el objeto de su tarjeta de embarque, no olvide implementar ComparableBoardingCardInterface. Además, agréguelo en la fábrica de cargadores.
Ejemplo :
class FerryBoardingCard implements BoardingCardInterface
{
use BoardingCardTrait;
private $ isGoldClass ;
public function __toString ()
{
return sprintf (
' Take ferry from %s to %s. Seat : %s. Gold class : %s ' ,
$ this -> departurePlace ,
$ this -> arrivalPlace ,
$ this -> seat ,
( $ this -> isGoldClass ) ? ' YES ' : ' NO '
);
}
}
Luego, hay que cambiar el cargador para poder crear tarjetas de embarque de ferry con él:
class JsonBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( $ json )
{
// ...
}
protected function createCard ( array $ cardData )
{
// ...
case ' ferry ' :
// data validation
return new FerryBoardingCard (
new Place ( $ cardData [ ' from ' ]),
new Place ( $ cardData [ ' to ' ]),
$ cardData [ ' seat ' ],
$ cardData [ ' isGoldClass ' ]
);
default:
throw new UnknownBoardingCardTypeException ( ' JSON Loading : Unknown board card type ' . $ type );
}
}
}
Con respecto al cargador, he implementado un JsonBoardingCardLoader que crea objetos de tarjetas de embarque a partir de una entrada JSON válida. Además, los datos de la tarjeta de embarque pueden provenir de múltiples formatos (por ejemplo, XML), por lo que creé una BoardingCardLoaderInterface con un método loadCards().
Entonces, una posible mejora de la API puede ser un XMLBoardingCardLoader como:
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
Finalmente, también es posible ampliar el código creando nuevos clasificadores implementando CardSorterInterface como:
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}