代码设计 - HTML getter和parser“设计模式”?

时间:2016-01-10 15:58:51

标签: java android

我正在编写一个获取网站html源代码的应用程序,并从中解析对象X的列表。

我写了一个课程HTMLGetterHTMLParserHTMLParser返回了X列表。

几天之后,这个设计对我来说似乎有点不对劲,我开始认为我应该有一个包含HTMLGetter的类作为子类,这个新类将返回X的列表(基本上是make {{ 1}} HTMLGetter)的子类,我们将此类称为HTMLParser

但是,现在我不确定如何处理从XsListGetter返回的HTTP响应代码。

我可以抛出一些异常,但后来我打破了HTMLGetter的封装。 我可以检查XsListGetter中的响应代码,如果发生了一些错误则返回null但是我丢失了关于发生了什么问题的信息。

这里的设计是什么?有正确的设计吗?也许与我建议的两个完全不同?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个个人意见,这就是我要做的事情:

只要有一个班级,就按照你的建议调用它XsListGetter。你可以把它变成一个单例,或者把它作为一个静态类(让所有方法都是静态的)。

然后,有一种方法来实际获取数据,这将是:

  • 从您提供的URL中获取HTML源代码,并将其放在类中的私有String变量中。

  • 将HTTP状态代码放在另一个私有变量中。

  • 如果完全失败(例如没有互联网连接),也要记录下来。

其次,有另一种方法检查请求是否成功,这将检查请求是否完全失败以及状态代码是否正确。

第三,有一个方法可以将HTML字符串解析为对象列表。

描述我的意思的一些伪代码:

class XsListGetter {
    private String sourceHtml;
    private boolean requestSucceeded = false;
    private int httpStatusCode = 0;

    public void fetchHtml(String url) {
        try {
            sourceHtml = //get the HTML as a string from the url
            httpStatusCode = //get the status code of the request, will be 200 if successful
            requestSucceeded = true //if we get here, we were successful
        } catch (IoException e) {
            requestSucceeded = false //otherwise, we didn't succeed
        }
    }

    public boolean requestSucceeded { //allow to check if the request succeeded
        return requestSucceeded && httpStatusCode == 200;
    }

    public List<MyItem> parseHtmlToList() {
        return parseHtmlStringToList(sourceHtml); //parse your Html to a list of items here
    }
}

然后,在您的调用代码中,您可以像这样使用它:

XsListGetter getter = new XsListGetter();
getter.fetchHtml();
if (getter.requestSucceeded() {
    myObjectsList = getter.parseHtmlToList();
} else {
    //Show helpful error message
}

当然,有很多不同的方法可以做到这一点,而我的可能不是最好的: - )

有些注意事项:

  • 如果您没有使用HTML解析器,请使用一个!我推荐Jsoup。

  • 你应该进行实验,如果找到更好的方法,就这样做。

  • 我不确切知道你在做什么,所以这可能不是最好的方式。

  • 没有“正确”的设计 - 有很多方法可以做到这一点,每种方法都有优点和缺点。

希望这会有所帮助: - )

相关问题