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 许可。