oleh AbdElKader Bouadjadja [email protected]
API ini memungkinkan Anda untuk mengurutkan kartu boarding Anda yang tidak diurutkan.
Bangun gambar buruh pelabuhan dan jalankan untuk menjadikannya sebuah wadah:
docker build -t medinae/journey .
docker run medinae/journey
1 . Muat objek kartu asrama dari data masukan Anda yang valid :
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2. Berikan BoardingCard Anda ke objek Trip baru. Anda juga dapat memasukkan penyortir spesifik Anda yang mengimplementasikan BoardingCardLoaderInterface. Secara default, penyortir yang ada akan digunakan.
$ trip = new Trip ( $ boardingCards );
// OR
$ trip = new Trip ( $ boardingCards , new MyAmazingSorter ());
3. Dapatkan kartu boarding yang Anda pesan (CATATAN : Metode toString juga diterapkan jika Anda ingin menampilkan informasi perjalanan ke dalam bentuk yang dapat dibaca manusia):
$ trip -> getOrderedBoardingCards ();
4. Menikmati !
Anda dapat membuat beberapa objek kartu boarding baru dengan mengimplementasikan BoardingCardInterface. Hati-hati, jika Anda ingin objek boarding card Anda dapat diurutkan berdasarkan API sorter, jangan lupa untuk mengimplementasikan ComparableBoardingCardInterface. Juga, tambahkan di pabrik loader.
Contoh :
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 '
);
}
}
Kemudian, loader harus diubah untuk membuat kartu boarding feri:
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 );
}
}
}
Mengenai pemuat, saya telah menerapkan JsonBoardingCardLoader yang membuat kartu objek kartu asrama dari input JSON yang valid. Selain itu, data kartu asrama mungkin berasal dari berbagai format (misalnya XML), jadi saya membuat BoardingCardLoaderInterface dengan metode loadCards().
Kemudian, kemungkinan peningkatan API dapat berupa XMLBoardingCardLoader seperti :
class XMLBoardingCardLoader implements BoardingCardLoaderInterface
{
public function loadCards ( string $ xml ): array
{
// Logic to create boarding cards objects cards from XML
}
}
Terakhir, kode juga dapat diperluas dengan membuat penyortir baru dengan mengimplementasikan CardSorterInterface seperti:
class AwesomeSorter implements CardSorterInterface
{
public function sort ( array $ boardingCards ): array
{
// Your awesome algorithm
}
}