【问题标题】:DB query result to custom object数据库查询结果到自定义对象
【发布时间】:2025-12-17 06:15:02
【问题描述】:

现在我已经开始开发我的小项目,只是为了扩展我对一些网络应用程序方面的知识并实现我上周一得到的一个想法。所以,我有 NodeJS + Mongo。由于项目是为了娱乐和教育,我不关心性能等,只是为了尝试新事物。

解决问题: 我有一些结构化数据,它们存储为纯文本文件。在跳了几圈之后,我编写了一个脚本,将这些数据转换为对象(自定义对象)并将它们推送到 MongoDB。但问题是:在我从数据库中获取它们之后 - 它们只是普通对象。所以我缺乏我的甜美和伟大的二传手,吸气剂等。 想了一会儿,我发现只有一种可能性,怎么做:遍历整个响应数组,并添加到我需要的 .prototype 功能(setter、getter 等)。但是它的性能似乎很差,而且方法似乎很愚蠢。

我会问你,这样做的正确方法是什么?例如,当我使用谷歌 API 时 - 我得到了自定义对象,以及一堆有用的方法。 另一个例子——在夏天我正在研究基于 Symfony2 的项目,在那里我使用了完全奇怪的(在那一刻)Doctrine2 ORM 层。在 OOP 世界中,我发现它很棒。他们在后台执行相同的技巧 - 将查询结果转换为对象并在数组中返回它们。

因为我不是一个要神奇药丸的人,所以我问你一些知识,我现在完全迷路了,去哪里寻找,寻找什么?

【问题讨论】:

    标签: arrays database node.js oop orm


    【解决方案1】:

    不,你没有迷路,可能你使用的是nodejs mongo驱动,一个低层,这就是为什么响应只是js对象,它不是像mongoose odm这样的高层数据层,你可以解析从司机做你想做的事。 Doctrine 是一个 orm ,它在引擎盖下使用驱动程序。

    【讨论】:

    • 感谢您的回复。是的,我正在使用 mongo 本机驱动程序。请纠正我,如果我弄错了,但是在 Symfony 中将结果转换为对象的整个魔法隐藏在驱动程序中?
    • 不,所有的魔法都是在教义中完成的,司机是一个连接器。
    • 驱动是一个连接到 DBSM 的连接器,比如 mysql php driver php.net/manual/en/mysql.php
    • 那么深入研究 Doctrine 是学习这种魔法的唯一方法,还是有其他资源可以学习模式?
    • 如果你想使用 mongo 进行高级抽象,你可以查看 mongoose (mongoosejs.com),如果你想学习设计模式,你可以阅读我发现的 EAA 的 P (martinfowler.com/books/eaa.html)框架模式解释。