允许转换为sql的PHP规范模式

时间:2009-11-24 20:33:04

标签: php oop design-patterns specifications specification-pattern

我正在尝试找出在PHP中使用规范模式的最佳方法,其中规范可以(可选)转换为PHP。

我正在探索一些新方向,并正在测试它们的工作情况。在我看来,代码和想法仍然很不清楚。

最小接口将是这样的:

interface IRepository {
    public function get(ISpecification $specification);
}

interface ISpecification {
    public function isSatisfiedBy($candidate);
}

如果存储库隐藏了sql数据库,则规范需要转换为sql。添加 - > toSQL()方法似乎是临时的。翻译规范的类也是一个选项,但最终生成sql似乎需要很多开销。

赞赏的想法。

1 个答案:

答案 0 :(得分:1)

引自POEAA(第324页):

  

在幕后,RepositoryMetadata Mapping (329)Query Object (316)结合使用,可根据条件自动生成SQL代码。标准是否知道如何将自己添加到查询中,查询对象(316)知道如何合并标准对象,或者元数据映射(306)本身控制交互是一个实现细节。

此说明中的条件当然是您的Specification pattern。我会说,当应用程序相对较小时,建议的方法在条件对象上使用toSQL方法很好。就像你已经说过的那样,走其他路线比较困难,但它也提供了更大的灵活性和脱钩。最后,只有你自己决定。