작성자: 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
}
}