3

我在 VBA 中研究一个类,该类使用 MSXML2.XmlHttp 封装下载内容。

返回值有三种可能:Text、XML 和 Stream。

我应该为每个创建一个函数:

 aText=myDownloader.TextSynchronous(URL,formData,dlPost,....)
 aXml.load myDownloader.XmlSynchronous(URL,formData,dlPost,....)

或者我可以只返回我在类中创建的 XmlHttpObject 然后有

 aText=myDownloader.Synchronous(URL,formData,dlPost,.....).ResponseText
 aXML=myDownloader.Synchronous(URL,formData,dlPost,.....).ResponseXML

在前一种情况下,我可以在类中将 obj 设置为空,但必须编写几个或多或少相同的函数。

在后一种情况下,我使用“垃圾收集器”,但课程更精简。

两者都应该工作,但哪一个是更好的编码风格?

4

2 回答 2

0

在我看来,第一种方法更好,因为您不会将低级细节暴露给高级抽象。

我用 Java 中的网络爬虫做了类似的事情,所以我有一个类只用于操作 URL 连接以获取所有需要的数据(低级)和一个使用返回名为 Page 的对象的低级类的高级类。

您可以使用第三种方法,仅执行myDownloader.Synchronous(URL,formData,dlPost,.....)返回的对象并将其存储在私有变量中,而其他方法仅操作此对象。这种形式,您只会打开一次连接。

于 2012-04-19T10:56:41.170 回答
0

在网上四处寻找之后(由 EmmadKareem 的评论触发),我发现了这个:

首先,不要localObject=Nothing在方法的末尾做 - 变量无论如何都会超出范围并被丢弃。在 msdn 上看到这个较旧但有启发性的帖子

VBA 使用引用计数,除了 ADO 上的一些较旧的错误之外,这似乎工作得很好,并且(据我所知)立即丢弃不再使用的资源。因此,从性能/内存使用的角度来看,这似乎不是问题。

至于编码风格:我认为我在设计它时的不舒服的感觉可以通过简单地将函数重命名为myDownloader.getSyncDLObj(...)或类似的方式消失。

代码风格似乎有两个阵营。一是提倡简洁的代码,易于阅读,但每次使用时都使用五行代码。它最重要的特权是“每个函数都应该做一件事,而且只做一件事。他们的方法可能看起来像

myDownloader.URL="..."
myDownloader.method=dlSync
myDownloader.download
aText=myDownloader.getXmlHttpObj.ResponseText
myDownloader.freeResources

一个是可以的,更混乱,但更少的线路消耗

aText=myDownloader.getSyncObj(...).ResponseText

两者都有其优点,两者都没有错,危险或不受欢迎。由于这是一个辅助类,我使用它从主代码中删除 xmlhttp 的内部工作,我更喜欢这里的第二种方法。(一个目标一条线;)

我会对任何人处理这件事很感兴趣

于 2012-04-19T21:39:01.693 回答