بواسطة عبد القادر بوعججة [email protected]
تمكنك واجهة برمجة التطبيقات هذه من فرز بطاقات الصعود إلى الطائرة غير المرتبة.
أنشئ صورة عامل الإرساء وقم بتشغيلها لجعلها حاوية:
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
}
}