我正在尝试找出在PHP中使用规范模式的最佳方法,其中规范可以(可选)转换为PHP。
我正在探索一些新方向,并正在测试它们的工作情况。在我看来,代码和想法仍然很不清楚。
最小接口将是这样的:
interface IRepository {
public function get(ISpecification $specification);
}
interface ISpecification {
public function isSatisfiedBy($candidate);
}
如果存储库隐藏了sql数据库,则规范需要转换为sql。添加 - > toSQL()方法似乎是临时的。翻译规范的类也是一个选项,但最终生成sql似乎需要很多开销。
赞赏的想法。
答案 0 :(得分:1)
引自POEAA(第324页):
在幕后,Repository将Metadata Mapping (329)与Query Object (316)结合使用,可根据条件自动生成SQL代码。标准是否知道如何将自己添加到查询中,查询对象(316)知道如何合并标准对象,或者元数据映射(306)本身控制交互是一个实现细节。
此说明中的条件当然是您的Specification pattern。我会说,当应用程序相对较小时,建议的方法在条件对象上使用toSQL
方法很好。就像你已经说过的那样,走其他路线比较困难,但它也提供了更大的灵活性和脱钩。最后,只有你自己决定。