par AbdElKader Bouadjadja [email protected]
Cette API vous permet de trier vos cartes d'embarquement non commandées.
Construisez l'image Docker et exécutez-la pour en faire un conteneur :
docker build -t medinae/journey .
docker run medinae/journey
1. Chargez les objets cartes d'embarquement à partir de vos données d'entrée valides :
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2 . Transmettez vos boardingCards à un nouvel objet Trip. Vous pouvez également injecter votre trieur spécifique qui implémente BoardingCardLoaderInterface. Par défaut, le trieur existant sera utilisé.
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3 . Obtenez vos cartes d'embarquement commandées (REMARQUE : la méthode toString est également implémentée si vous souhaitez afficher les informations de voyage sous une forme lisible par l'homme) :
$ trip -> getOrderedBoardingCards ();
4 . Apprécier !
Vous pouvez créer de nouveaux objets de carte d'embarquement en implémentant BoardingCardInterface. Attention, si vous souhaitez que votre objet carte d'embarquement soit triable par le trieur API, n'oubliez pas d'implémenter ComparableBoardingCardInterface. Ajoutez-le également dans l’usine des chargeurs.
Exemple :
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 '
);
}
}
Il faut ensuite changer le chargeur afin de créer avec lui les cartes d'embarquement du ferry :
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 );
}
}
}
Concernant le chargeur, j'ai implémenté un JsonBoardingCardLoader qui crée des cartes d'objets de cartes d'embarquement à partir d'une entrée JSON valide. De plus, les données de la carte d'embarquement peuvent provenir de plusieurs formats (par exemple XML), j'ai donc créé une BoardingCardLoaderInterface avec une méthode loadCards().
Ensuite, une amélioration possible de l'API peut être un XMLBoardingCardLoader comme :
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
Enfin, il est également possible d'étendre le code en créant de nouveaux trieurs en implémentant CardSorterInterface comme :
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}