Ide sentral dari Spesifikasi adalah untuk memisahkan pernyataan tentang bagaimana mencocokkan seorang kandidat, dari objek kandidat yang dicocokkannya.
Spesifikasinya dijelaskan oleh Eric Evans dan Martin Fowler
RulerZ adalah implementasi PHP dari pola Spesifikasi yang menekankan tiga aspek utama:
Aturan bisnis dapat ditulis sebagai teks menggunakan bahasa khusus, sangat mirip dengan SQL, dalam hal ini kita menyebutnya sebagai aturan atau dapat diringkas dalam satu kelas dan disebut sebagai spesifikasi .
Setelah aturan (atau spesifikasi) ditulis, aturan tersebut dapat digunakan untuk memeriksa apakah ada kandidat yang memenuhinya atau langsung menanyakan sumber data.
Sumber data berikut didukung secara asli:
Dan dukungan untuk masing-masing hal ini disediakan oleh perpustakaan tambahan:
Fitur mematikan: saat bekerja dengan Doctrine, Pomm, atau Elasticsearch, RulerZ dapat mengonversi aturan secara langsung dalam kueri dan tidak perlu mengambil data terlebih dahulu.
Pertama-tama, Anda dapat mengungkapkan aturan bisnis dalam bahasa yang berdedikasi dan sederhana . Kemudian, aturan bisnis ini dapat diringkas dalam kelas spesifikasi, digunakan kembali, dan disusun untuk membentuk aturan yang lebih kompleks. Spesifikasi sekarang dapat digunakan kembali dan diuji . Dan yang tak kalah pentingnya, aturan ini dapat digunakan untuk memeriksa apakah kandidat memenuhi kriteria tersebut dan untuk memfilter sumber data apa pun .
Jika Anda masih perlu yakin, Anda bisa membaca alasannya selengkapnya di artikel ini.
Sebagai gambaran singkat, kami mengusulkan untuk melihat contoh kecil yang memanipulasi aturan sederhana dan beberapa sumber data.
Aturan selanjutnya menggambarkan " pemain wanita berperingkat tinggi " (pada dasarnya, pemain wanita yang memiliki lebih dari 9000 poin).
$ highRankFemalesRule = ' gender = "F" and points > 9000 ' ;
Kami memiliki sumber data berikut:
// 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 ),
];
Untuk sumber data kami mana pun, mengambil hasilnya semudah memanggil metode 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 );
Diberikan seorang kandidat, memeriksa apakah memenuhi aturan bermuara pada memanggil metode satisfies
:
$ isHighRankFemale = $ rulerz -> satisfies ( $ playersObj [ 0 ], $ highRankFemalesRule );
Lihat dokumentasi untuk mengetahui apa yang RulerZ dapat lakukan untuk Anda.
Perpustakaan ini berada di bawah lisensi MIT.