por AbdElKader Bouadjadja [email protected]
Esta API permite que você classifique seus cartões de embarque não solicitados.
Crie a imagem do Docker e execute-a para torná-la um contêiner:
docker build -t medinae/journey .
docker run medinae/journey
1. Carregue os objetos dos cartões de embarque a partir dos seus dados de entrada válidos:
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2. Passe seus cartões de embarque para um novo objeto Trip. Você também pode injetar seu classificador específico que implementa BoardingCardLoaderInterface. Por padrão, o classificador existente será usado.
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3. Obtenha seus cartões de embarque solicitados (NOTA: O método toString também é implementado se você deseja exibir as informações da viagem em formato legível por humanos):
$ trip -> getOrderedBoardingCards ();
4. Aproveitar !
Você pode criar alguns novos objetos de cartão de embarque implementando BoardingCardInterface. Tenha cuidado, se você deseja que seu objeto de cartão de embarque seja classificável pelo classificador de API, não se esqueça de implementar ComparableBoardingCardInterface. Além disso, adicione-o na fábrica dos carregadores.
Exemplo :
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 '
);
}
}
Em seguida, o carregador deve ser alterado para criar cartões de embarque na balsa com ele:
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 );
}
}
}
Em relação ao carregador, implementei um JsonBoardingCardLoader que cria cartões de objetos de embarque a partir de uma entrada JSON válida. Além disso, os dados do cartão de embarque podem vir de vários formatos (por exemplo, XML), então criei um BoardingCardLoaderInterface com um método loadCards().
Então, um possível aprimoramento da API pode ser um XMLBoardingCardLoader como:
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
Finalmente, também é possível estender o código criando novos classificadores implementando CardSorterInterface como:
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}