Return 使用 class 方法一次处理了数据库数据

Return processed DB data at once using class method

我有一个 class,它应该从数据库中加载具有给定 ID 的文章。它 return 是一个包含请求的数据库行的记录集。它运作良好,但有时我想附加一个额外的专栏。但是,我只能更改已经存在的列的值。像这样:

article("imageID") = getImageURL(article("imageID"))

这样,我把图片ID改写成了URL。

但是假设我想要 return ID 和 URL。根据我的发现,当列已被数据库中的数据填充时,不可能将列附加到记录集中。一种解决方案是使用 class 变量,但我正在寻找一种方法一次 return 所有数据(不将它们分为记录集和 class 变量),因为会有在我的案例中,这样的变量太多了,我认为它无论如何都不干净。那么最好的其他方法是什么?

这是我当前的代码:

public property get getRecordSet()
    set article = Server.CreateObject("ADODB.Recordset")        
    article.open "SELECT * FROM article WHERE id = '" & articleId & "'", db, 2, 3

    if not data.eof then
        // This formats some values, so I can directly use them when returned

        article("imageID") = getImageURL(article("imageID"))
        article("date") = getFormatedDate(article("date"))

        // imageID and date are rewritten now, so I can't access
        // their original values anymore

        // But instead of above, I would like to keep imageID and date
        //   and return their processed values as well.
        //     As follows (but it's not the correct working way):

        article("imageURL") = getImageURL(article("imageID"))
        article("formatedDate") = getFormatedDate(article("date"))
    end if

    // Return recordset
    set getRecordSet = article
end property

有什么理由需要 return 记录集吗?看起来您只是 returning 单行的值。如果您需要添加其他信息,那么无论如何您都会违反记录集合同。您可以 return 数组或字典同样容易。

例如,如果您使用的是 getDictionary() 属性:

Public Property Get getDictionary()

    set article = Server.CreateObject("ADODB.Recordset")        
    article.open "SELECT * FROM article WHERE id = '" & articleId & "'", db, 2, 3

    Set getDictionary = Server.CreateObject("Scripting.Dictionary")

    getDictionary.Add "imageID", article("imageID")
    getDictionary.Add "imageURL", getImageURL(article("imageID"))
    getDictionary.Add "date", article("date")
    getDictionary.Add "formatedDate", getFormatedDate(article("date"))

End Property

然后你就可以这样使用了:

Response.Write someObject.getDictionary.Item("imageURL")