AbdElKader Bouadjadja [email protected] より
この API を使用すると、注文されていない搭乗カードを並べ替えることができます。
docker イメージをビルドして実行し、コンテナーにします。
docker build -t medinae/journey .
docker run medinae/journey
1.有効な入力データから搭乗カード オブジェクトを読み込みます。
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2.搭乗カードを新しい Trip オブジェクトに渡します。 BoardingCardLoaderInterface を実装する特定のソーターを挿入することもできます。デフォルトでは、既存のソーターが使用されます。
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3.注文した搭乗カードを取得します (注: 旅行情報を人間が読める形式で表示したい場合は、 toString メソッドも実装されます)。
$ trip -> getOrderedBoardingCards ();
4.楽しむ !
BoardingCardInterface を実装することで、いくつかの新しい搭乗カード オブジェクトを作成できます。搭乗カード オブジェクトを API ソーターでソートできるようにしたい場合は、ComparableBoardingCardInterface を忘れずに実装してください。また、ローダーファクトリーにも追加します。
例 :
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 '
);
}
}
次に、ローダーでフェリー乗船カードを作成するには、ローダーを変更する必要があります。
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 );
}
}
}
ローダーに関しては、有効な JSON 入力から搭乗カード オブジェクト カードを作成する JsonBoardingCardLoader を実装しました。 さらに、搭乗カード データは複数の形式 (XML など) から取得される可能性があるため、loadCards() メソッドを使用して BoardingCardLoaderInterface を作成しました。
次に、API の拡張として次のような XMLBoardingCardLoader が考えられます。
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
最後に、次のように CardSorterInterface を実装して新しいソーターを作成し、コードを拡張することもできます。
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}