rulerz
1.0.0
規範的中心思想是將如何匹配候選對象的語句與其匹配的候選對象分開。
規格,由 Eric Evans 和 Martin Fowler 解釋
RulerZ 是規範模式的 PHP 實現,它強調三個主要面向:
業務規則可以使用專用語言編寫為文本,非常接近 SQL,在這種情況下,我們將它們稱為規則,或者可以將它們封裝在單一類別中並稱為規範。
一旦編寫了規則(或規範),就可以使用它來檢查單一候選是否滿足它或直接查詢資料來源。
本機支援以下資料來源:
對其中每一個的支援都是由一個附加函式庫提供的:
殺手級功能:當與 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 許可。