แนวคิดหลักของข้อกำหนดเฉพาะคือการแยกข้อความเกี่ยวกับวิธีการจับคู่ผู้สมัคร ออกจากวัตถุของผู้สมัครที่ตรงกัน
ข้อมูลจำเพาะ อธิบายโดย Eric Evans และ Martin Fowler
RulerZ คือการนำ PHP ไปใช้ตาม รูปแบบ Specification ซึ่งให้ความสำคัญกับสามประเด็นหลัก:
กฎเกณฑ์ทางธุรกิจสามารถเขียนเป็นข้อความโดยใช้ภาษาเฉพาะ ซึ่งใกล้เคียงกับ SQL มาก ซึ่งในกรณีนี้เราจะเรียกกฎเหล่านั้นว่าเป็น กฎ หรือสามารถสรุปไว้ในคลาสเดียวและเรียกว่า ข้อกำหนด
เมื่อเขียนกฎ (หรือข้อกำหนด) แล้ว จะสามารถใช้เพื่อตรวจสอบว่าผู้สมัครรายเดียวเป็นไปตามกฎหรือไม่ หรือเพื่อสืบค้นแหล่งข้อมูลโดยตรง
แหล่งข้อมูลต่อไปนี้ได้รับการสนับสนุนโดยกำเนิด:
และการสนับสนุนแต่ละรายการมีให้โดยห้องสมุดเพิ่มเติม:
ฟีเจอร์ Killer: เมื่อทำงานกับ Doctrine, Pomm หรือ Elasticsearch นั้น RulerZ สามารถแปลงกฎเป็นการสืบค้นได้โดยตรง และไม่จำเป็นต้องดึงข้อมูลล่วงหน้า
ก่อนอื่น คุณจะต้อง แสดงกฎเกณฑ์ทางธุรกิจ ด้วย ภาษาที่เข้าใจง่ายโดยเฉพาะ จากนั้น กฎเกณฑ์ทางธุรกิจเหล่านี้สามารถถูก ห่อหุ้มไว้ ในคลาสข้อกำหนด นำกลับมาใช้ใหม่และเรียบเรียงเพื่อสร้างกฎที่ซับซ้อนมากขึ้น ข้อมูลจำเพาะขณะนี้ สามารถนำกลับมาใช้ใหม่ และ ทดสอบได้ และสุดท้ายแต่ไม่ท้ายสุด สามารถใช้กฎเหล่านี้เพื่อตรวจสอบว่าผู้สมัครพึงพอใจหรือไม่ และเพื่อ กรองแหล่งข้อมูลใดๆ
หากคุณยังต้องถูกตัดสินลงโทษ คุณสามารถอ่านเหตุผลทั้งหมดได้ในบทความนี้
สำหรับภาพรวมโดยย่อ เราเสนอให้ดูตัวอย่างเล็กๆ น้อยๆ ที่จัดการกับกฎง่ายๆ และแหล่งข้อมูลหลายแหล่ง
กฎต่อไปนี้จะอธิบายถึง " ผู้เล่นหญิงระดับสูง " (โดยทั่วไปคือผู้เล่นหญิงที่มีคะแนนมากกว่า 9000 คะแนน)
$ highRankFemalesRule = ' gender = "F" and points > 9000 ' ;
เรามีแหล่งข้อมูลดังต่อไปนี้:
// a Doctrine QueryBuilder
$ playersQb = $ entityManager
-> createQueryBuilder ()
-> select ( ' p ' )
-> from ( ' EntityPlayer ' , ' p ' );
// or an array of arrays
$ playersArr = [
[ ' pseudo ' => ' Joe ' , ' gender ' => ' M ' , ' points ' => 2500 ],
[ ' pseudo ' => ' Moe ' , ' gender ' => ' M ' , ' points ' => 1230 ],
[ ' pseudo ' => ' Alice ' , ' gender ' => ' F ' , ' points ' => 9001 ],
];
// or an array of objects
$ playersObj = [
new Player ( ' Joe ' , ' M ' , 40 , 2500 ),
new Player ( ' Moe ' , ' M ' , 55 , 1230 ),
new Player ( ' Alice ' , ' F ' , 27 , 9001 ),
];
สำหรับแหล่งข้อมูลใดๆ ของเรา การดึงผลลัพธ์ทำได้ง่ายเพียงแค่เรียกวิธี filter
:
// converts the rule in DQL and makes a single query to the DB
$ highRankFemales = $ rulerz -> filter ( $ playersQb , $ highRankFemalesRule );
// filters the array of arrays
$ highRankFemales = $ rulerz -> filter ( $ playersArr , $ highRankFemalesRule );
// filters the array of objects
$ highRankFemales = $ rulerz -> filter ( $ playersObj , $ highRankFemalesRule );
ให้ผู้สมัครตรวจสอบว่าเป็นไปตามกฎหรือไม่โดยต้องเรียกเมธอด satisfies
:
$ isHighRankFemale = $ rulerz -> satisfies ( $ playersObj [ 0 ], $ highRankFemalesRule );
ตรวจสอบเอกสารเพื่อดูว่า RulerZ สามารถทำอะไรให้คุณได้บ้าง
ห้องสมุดนี้อยู่ภายใต้ใบอนุญาตของ MIT