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")
我有一个 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")