Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

amb00

Co myślicie o moich projektach?

Rekomendowane odpowiedzi

Witajcie, niedawno postanowiłem opublikować kilka swoich programów napisanych z C++ z użyciem Qt, które napisałem na PCty. Chciałbym, abyście je ocenili zarówno pod względem jakości kodu, jeśli znacie się na programowaniu, jak i pod względem samej przydatności i wygody użytkowania jako zwykli użytkownicy. Link, gdzie znajdują się zarówno kody źródłowe, skompilowane wersje oraz opisy: http://github.com/arkadiusz97

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jesli 97 w Twoim nicku to rok urodzenia, to nie jest zle, jednak jest tez nad czym pracowac. Kilka randomowych uwag do Twojego kodu:

* funkcje bool zwracaja int

* obiekty QFile typu automatycznego - nie trzeba wolac close()

* wiele metod mogloby byc opatrzonych modyfikatorem const

* bool programManager::runRequest w projekcie UniversalBot - nie ma potrzeby w petli tworzyc QNetworkAccessManager. Gdybys czytal dokumentacje, to dowiedzialbys sie m.in ze wystarczy jedna instancja per program

* ogolnie metoda bool programManager::runRequest jest skonstruowana nie tak jak powinna byc

* rzucaniem int'ami - powinienes rzucic std::exception (a raczej jeden z jego wariantow)

* jesli tworzysz obiekty na stercie i sa to obiekty QT ktorym przypisujesz parenta (this) to nie ma potrzeby robic delete w destruktorze (czasami wrecz moze to zaszkodzic)

* pewnie jeszcze kilka by sie znalazlo - nie zaglebialem sie mocno

 

Ogolnie taki kod nie przeszedlby u mnie code review, ale w swoim zyciu widywalem gorsze.

 

Poza tym - popracuj nad jezykiem angielskim.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jesli 97 w Twoim nicku to rok urodzenia, to nie jest zle, jednak jest tez nad czym pracowac. Kilka randomowych uwag do Twojego kodu:

* bool programManager::runRequest w projekcie UniversalBot - nie ma potrzeby w petli tworzyc QNetworkAccessManager. Gdybys czytal dokumentacje, to dowiedzialbys sie m.in ze wystarczy jedna instancja per program

* ogolnie metoda bool programManager::runRequest jest skonstruowana nie tak jak powinna byc

To tworzenie nowej instancji QNetworkAccessManager miało na celu czyszczenie ciastek po każdym zapytaniu. Rozumiem, że lepiej użyć setCookieJar i po każdym zapytaniu czyścić przypisany QNetworkCookieJar? Jeśli chodzi o bool programManager::runRequest, to jak powinienem ją zbudować? Co w niej poprawić?

Ogolnie taki kod nie przeszedlby u mnie code review, ale w swoim zyciu widywalem gorsze.

Widziałeś gorsze kody pisane przez programistów zatrudnionych na etat?

na przyszłość staraj się też bardziej izolować logikę programu od GUI

Starałem się to robić, choć przyznam się, że miałem problem, aby to wszystko dobrze "zorganizować". Dałbyś jakąś radę dotyczącą konkretnego projektu i jego podziału?

 

W każdym razie, dziękuję Wam za porady :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
To tworzenie nowej instancji QNetworkAccessManager miało na celu czyszczenie ciastek po każdym zapytaniu. Rozumiem, że lepiej użyć setCookieJar i po każdym zapytaniu czyścić przypisany QNetworkCookieJar? Jeśli chodzi o bool programManager::runRequest, to jak powinienem ją zbudować? Co w niej poprawić?

 

 

Dokladnie - powinienes korzystac z QNetworkCookieJar.

 

Widziałeś gorsze kody pisane przez programistów zatrudnionych na etat?

 

Tak. Zwykle w okolicach medium/regular.

 

Starałem się to robić, choć przyznam się, że miałem problem, aby to wszystko dobrze "zorganizować". Dałbyś jakąś radę dotyczącą konkretnego projektu i jego podziału?

 

Mechanizm sygnalow/slotow znacznie ulatwia sprawe. Zasada jest prosta. Wszystko co korzysta z interfejsu uzytkownika powinno byc oddzielone od "backendu". Backend powinien zajmowac sie Twoja logika, czyli przetwarzaniem na przyklad danych z sieci, parsowaniem odpowiedzi, zapytaniami do bazy danych. Schodzac juz do konkretnego studium przypadku, masz swoj QNetworkReply. Jesli dane przychodza w formie JSON (na przyklad), na backendzie je parsujesz i wkladasz do kontenera typu QList<StrukturaDanych>. Nastepnym krokiem jest wyemitowanie sygnalu zeby powiadomic sluchaczy, ze odebrano i sparsowano dane. Na "frontendzie" (umowna nazwa w przypadku aplikacji desktopowych, jest to zwykle osobna klasa/biblioteka) iterujesz po kontenerze i wstawiasz do kontrolki QListView.

 

Jesli wymieszasz GUI z backendem, to znacznie ograniczasz elastycznosc takiego oprogramowania. Oczywiscie w swiecie programistow czasami tak robimy, kiedy piszemy jakis prosty tool, eksperymentujemy itd, cokolwiek co za chwile zostanie porzucone i zapomniane.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@winuser_pl Starałem się oczywiście oddzielać logikę od interfejsu, ale w niektórych przypadkach po prostu nie wszystko było oczywiste. Dzięki w każdym razie za porady :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...