โดย AbdElKader Bouadjadja [email protected]
API นี้ช่วยให้คุณสามารถจัดเรียงบัตรขึ้นเครื่องที่ไม่ได้เรียงลำดับได้
สร้างอิมเมจนักเทียบท่าและรันเพื่อสร้างเป็นคอนเทนเนอร์:
docker build -t medinae/journey .
docker run medinae/journey
1. โหลดวัตถุบัตรขึ้นเครื่องจากข้อมูลอินพุตที่ถูกต้องของคุณ:
$ loader = new JsonBoardingCardLoader ();
$ boardingCards = $ loader -> loadCards ( $ jsonCards );
2. ส่งบัตรขึ้นเครื่องของคุณไปยังวัตถุการเดินทางใหม่ คุณยังสามารถฉีดเครื่องคัดแยกเฉพาะของคุณที่ใช้ 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 );
}
}
}
เกี่ยวกับตัวโหลด ฉันได้ใช้งาน JsonBoardingCardLoader ซึ่งสร้างออบเจ็กต์การ์ดขึ้นเครื่องจากอินพุต JSON ที่ถูกต้อง นอกจากนี้ ข้อมูลบัตรขึ้นเครื่องอาจมาจากหลายรูปแบบ (เช่น XML) ดังนั้นฉันจึงสร้าง BoardingCardLoaderInterface ด้วยเมธอด loadCards()
จากนั้น การปรับปรุงที่เป็นไปได้ของ 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
}
}