Code review Asp.Net 3.1 Web Api

0

Cześć, chciałbym zasięgnąć opinii bardziej doświadczonych kolegów odnośnie mojego projektu na githubie. Jest to web scraper wywoływany przez Api z obsługą bazy danych - w tym przypadku MSSQL.
https://github.com/asdros/Scraper

Proszę o konstruktywną krytykę.

0

Cześć,

  • Moim skromnym daniem, wszędzie używasz var, co utrudnia mi czytanie kodu.
  • robisz ten sam błąd co ja kiedyś robiłem korzystając z HtmlAgilityPack, a mianowicie powinieneś utworzyć najpierw statyczną instancję private static HttpClient client;, i z niej korzystać ładując strony do HtmlAgilityPack tak:
using (HttpResponseMessage response = client.GetAsync(url).Result)
                {
                    using (HttpContent content = response.Content)
                    {
                        html = content.ReadAsStringAsync().Result;
                    }
                }
HtmlDocument doc = new HtmlDocument(); //htmlagilitypack
doc.LoadHtml(html);

w Twojej apce to nie będzie zauważalne, ale przy większej ilości połączeń miałem wycieki pamięci i mocno się drapałem w głowę nim wpadłem na to, że to właśnie przez HtmlAgilityPack.

  • chyba nigdzie nie masz Dispose połączenia...? Patrz wyżej using.
  • tutaj jest poradnik jak korzystać z HttpClient
  • wszystko związane z parsowaniem XPath / Node bym wrzucił do osobnego serwisu
  • tak samo zarządzanie połączeniami
  • nie obsługujesz też błędów w żadnym endpoincie
  • Asp.Net 3.1 Web Api, domyślam się, że chodzi o ASP.NET Core 3.1, a nie ASP.NET MVC 3, też warto uściślać :)

Poza kontrolerem nic więcej nie sprawdzałem.

0
  1. Za dużo logiki w kontrolerze.
  2. Zbędne interfejsy, które niczego nie wnoszą.
1
  1. Ten kod to chyba w ogóle zbyt dobrze nie działa, skoro do bazy dodaje puste obiekty... https://github.com/asdros/Scraper/blob/master/Controllers/ScrapController.cs#L103 - i jak dla mnie to jak już to dodawanie obiektu powinno być pod koniec, a nie jeszcze wewnątrz parsującego foreacha.
  2. Zamiast tworzyć ten milion zmiennych to może od razu zrobić obiekt, a potem go wypełniać na podstawie scrapowania? https://github.com/asdros/Scraper/blob/master/Controllers/ScrapController.cs#L67
  3. Ja rozumiem, że tak było łatwiej, ale w twoim modelu danych wszystko to string...
  4. Z samej nazwy GetItemsByHigherTemp nie jestem w stanie domyślić się o co chodzi. Pobierz elementy przez większą temperaturę?
  5. I jak już wspomniał @somekind, to wszystko to raczej niekoniecznie powinno być w kontrolerze.
0

Ok koledzy, największe bolączki o których pisaliście poprawiłem na miarę swoich obecnych możliwości.

0 użytkowników online, w tym zalogowanych: 0, gości: 0