von AbdElKader Bouadjadja [email protected]
Mit dieser API können Sie Ihre ungeordneten Bordkarten sortieren.
Erstellen Sie das Docker-Image und führen Sie es aus, um daraus einen Container zu machen:
docker build -t medinae/journey .
docker run medinae/journey
1 . Laden Sie die Bordkartenobjekte aus Ihren gültigen Eingabedaten:
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2 . Übergeben Sie Ihre Bordkarten an ein neues Reiseobjekt. Sie können auch Ihren spezifischen Sortierer einfügen, der BoardingCardLoaderInterface implementiert. Standardmäßig wird der vorhandene Sortierer verwendet.
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3 . Holen Sie sich Ihre bestellten Bordkarten (HINWEIS: Die toString-Methode ist auch implementiert, wenn Sie die Reiseinformationen in einer für Menschen lesbaren Form anzeigen möchten):
$ trip -> getOrderedBoardingCards ();
4 . Genießen !
Sie können einige neue Bordkartenobjekte erstellen, indem Sie BoardingCardInterface implementieren. Seien Sie vorsichtig: Wenn Sie möchten, dass Ihr Bordkartenobjekt vom API-Sortierer sortiert werden kann, vergessen Sie nicht, ComparableBoardingCardInterface zu implementieren. Fügen Sie es außerdem im Werk des Laders hinzu.
Beispiel :
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 '
);
}
}
Anschließend muss der Loader geändert werden, um damit Fähren-Bordkarten erstellen zu können:
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 );
}
}
}
Was den Loader betrifft, habe ich einen JsonBoardingCardLoader implementiert, der Bordkartenobjekte aus einer gültigen JSON-Eingabe erstellt. Darüber hinaus können die Bordkartendaten aus mehreren Formaten stammen (z. B. XML), daher habe ich ein BoardingCardLoaderInterface mit einer Methode „loadCards()“ erstellt.
Dann kann eine mögliche Erweiterung der API ein XMLBoardingCardLoader sein wie:
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
Schließlich ist es auch möglich, den Code zu erweitern, indem neue Sortierer erstellt werden, indem CardSorterInterface wie folgt implementiert wird:
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}