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

发布于 2024-08-12 04:19:11 字数 413 浏览 7 评论 0原文

我试图找出在 PHP 中拥有规范模式的最佳方法是什么,其中规范可以(可选)转换为 PHP。

我正在探索一些新的方向并测试它们的效果如何。代码和思路在我脑子里还是很不清楚。

最小接口如下:

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

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

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

想法表示赞赏。

I'm trying to find out what the best way would be to have a specification pattern in PHP where the specifications could (optionally) by transformed to PHP.

I am exploring some new directions and am testing how well they would work. Code and ideas are still very unclear in my mind.

Minimal interfaces would be like these:

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

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

If the repository hides a sql database the specification would need to transform to sql. Adding a ->toSQL() method seems ad hoc. A class that translates the specifications is also an option but it seems like a lot of overhead to finally generate the sql.

Ideas appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稍尽春風 2024-08-19 04:19:11

引用 POEAA(第 324 页):

在幕后,存储库结合了元数据映射 (329)查询对象 (316) 根据条件自动生成 SQL 代码。无论条件是否知道如何将自身添加到查询中,查询对象(316)是否知道如何合并条件对象,或者元数据映射(306)本身控制交互是一个实现细节。

此描述中的标准当然是您的规范模式。我想说,当应用程序相对较小时,您建议的在条件对象上使用 toSQL 方法的方法是很好的。正如您已经说过的,走其他路线更困难,但它也提供了更大的灵活性和解耦性。最终,只有你能决定。

Quoting from POEAA (pg.324):

Under the covers, Repository combines Metadata Mapping (329) with a Query Object (316) to automatically generate SQL code from the criteria. Whether the criteria know how to add themselves to a query, the Query Object (316) knows how to incorporate criteria objects, or the Metadata Mapping (306) itself controls the interaction is an implementation detail.

The criteria in this descriptions are of course your Specification pattern. I'd say your suggested approach to use a toSQL method on the criteria objects is fine when the application is relatively small. Like you already said, going the other routes is more difficult, but it also provides greater flexibility and decoupling. In the end, only you can decide.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文