如何停止重复代码

本文关键字:代码 何停止 | 更新日期: 2023-09-27 18:28:18

我是OOP编程的新手,我想知道是否有人能帮助我。我一直在写一些代码,我意识到我需要程序做的事情有很多重复;

class scrape
{
    public void parse()
    {
        string Url = "http://www.blah.co.uk/";
        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(Url);
        Console.WriteLine("URL Loaded,");
        scrape scrape = new scrape();
        scrape.cats(doc);
    }
    private void cats(HtmlDocument doc)
    {
        HtmlNode topcats = doc.GetElementbyId("main_nav");
        if (topcats != null)
        {
            IEnumerable<HtmlNode> topnav = topcats.Descendants("a");
            foreach (var toplink in topnav)
            {
                if (toplink.Attributes.Contains("href"))
                {
                    if (toplink.Attributes["href"].Value.EndsWith(".html"))
                    {
                        Console.WriteLine("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
                        Console.WriteLine("++++++++ " + toplink.InnerText + " +++++++++++");

                        //sub cats
                        HtmlWeb cat_web = new HtmlWeb();
                        HtmlDocument cat_doc = cat_web.Load("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
                        HtmlNode subcats = cat_doc.GetElementbyId("pagenav");
                        if (subcats != null)
                        {
                            IEnumerable<HtmlNode> subnav = subcats.Descendants("a");
                            foreach (var sublink in subnav)
                            {
                                if (sublink.Attributes.Contains("href"))
                                {
                                    if (sublink.Attributes["href"].Value.EndsWith(".html"))
                                    {
                                        Console.WriteLine("http://www.blah.co.uk/" +sublink.Attributes["href"].Value);
                                        Console.WriteLine(sublink.InnerText);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        Console.ReadLine();
    }
}

}

从上面可以帮助我减少代码中的重复吗?以及我如何在c#中做到这一点。如有任何帮助或信息,我们将不胜感激。

如何停止重复代码

我认为您的问题实际上是关于OOP的介绍
在设计OOP应用程序时,您需要思考自己在做什么,
参与的"事物"是什么,将它们划分为类和对象(类的实例)
思考一个对象能做什么,写出最基本的动作,然后在基本动作的基础上做出更复杂的动作
https://www.youtube.com/watch?v=c5kfCH50wl0

例如实例化和创建,Parse方法是对象的一部分,它创建了一个新的实例,没有任何可见的原因。

我为你设计了一些方法

public void Read()
{
     HtmlDocument topDocument = LoadDocument("blah.uk");
     IEnumerable<HtmlNode> topLinks = ReadLinks(topDocument, "main_nav");
     foreach (HtmlNode topLink in topLinks) {
         HtmlDocument catDoc = LoadDocument("littletreasurespartybags" + toplink.Attributes["href"].Value);
         IEnumerable<HtmlNode> catLinks = ReadLinks(topDocument, "main_nav");
         foreach (HtmlNode catLink in catLinks) {
             .....
         }
     }
}
private HtmlDocument LoadDocument(string Url) { ..... }
private IEnumerable<HtmlNode> ReadLinks(HtmlDocument document, string topElement) { ....}