Witam,
Właśnie skończyłem pisać skrypt Python, który pobiera oferty pracy z serwisów linkedin i pracuj.pl, zapisuje je w lokalnej bazie danych i wyświetla nowe oferty przy pomocy C# windows form.
Zamysł jest taki, że skrypt jest zaplanowany w Task Schedulerze i co jakiś czas przeszkuje serwisy.
Czy ktoś miałby ochotę dokonać recenzji projektu?
https://github.com/JakubKrk/JobAlert
Z góry dziękuję !
- Rejestracja:około 5 lat
- Ostatnio:około 3 lata
- Postów:2
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 4 lata
- Postów:20
W kodzie jest bardzo dużo pomniejszych błędów, które bardzo szybko dostrzeżesz jeśli zaczniesz sobie zadawać jedno pytanie - jak to przetestować? To jest bardzo dobre pytanie, to jest również pytanie które pozwoli Ci odróżnić tylko "działący" kod od kodu z jakim docelowo chce pracować dobry programista. Poniżej wybrałem dwa przypadki zasługujące na osobny komentarz:
Pomijanie klasy wyjątku to zła praktyka. Bez określenia typu wyjątku, blok except złapie każdy wyjątek, a nie każdy wyjątek jest spodziewany więc jeśli oddasz kontrolę sterowania niespodziewanym wyjątkom to wyciszysz błędy i tylko utrudnisz sobie pracę nad debugowaniem. Dopisuj nazwy wyjątków. Nie muszą to być konkretnie te same wyjątki, które widzisz w tracebacku, czasem warto łapać ogólne błędy (w tym celu zajrzyj do dokumentacji wybranej biblioteki).
Próba ukrycia całej interakcji z bazą w jednej klasie to pomysł tylko na krótką metę. Jeśli będziesz miał więcej tabel i logiki to Twój wrapper tylko utrudni Ci pracę. Taki kod nie służy klasom (przeciwieństwo SOLID), ani spójności danym (transakcje). W przypadku tej aplikacji zastanawiam się czemu nie zapisujesz wyników do plików CSV. Ten zrzut z pewnością byłby prostszy i lepszy niż próby zapisu w których spodziewasz się kolizji z kluczem głównym (link).
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 4 lata
- Postów:20
Wykorzystanie bazy danych w tym projekcie ma też dla mnie wartość dydaktyczną. Czy w twojej opinii jest to zbytnie "przedobrzenie", czy nie jest aż tak rażące, jeśli wiadomo, że projekt służy edukacji? I jak powinna być zrealizowana interakcja z tablicą jeśli wykorzystanie klasy jest zbyt kłopotliwa?
Nie napisałem, że realizacja zadań z bazą poprzez klasy jest zła (w codziennej pracy tego typu rzecz upraszcza pisanie żmudnych rzeczy: peewee / SQLAlchemy / django orm). Zwróciłem uwagę, że sprowadzenie całej interakcji z bazą do jednej klasy to jest problem. Twoja klasa robi wszystkie zapytania, i przy okazji tworzy tabelki i to jest kod, który będzie sprawiał problemy w utrzymaniu.
Z rzeczy które możesz zrobić to:
- Wyodrębnij pólę połączeń
- Oddziel rzeczy związane z DDL.
- Lepiej zaprojektuj tabelkę (link jako klucz główny to słaby pomysł)
- Podziel zapytania.
- Pomyśl o transakcjach.
Ale tak naprawdę powinieneś wcześniej temat lepiej poznać. Przeczytać dobrą książkę o bazach danych [0][1][2][3] i zrozumieć, że baza danych to nie tylko składowisko na dane. Jeśli tego nie zrozumiesz to próby pracy z bazą będą średnio Ci wychodzić.
Kod jaki napisałeś w praktyce lepiej by Ci wyszedł, gdybyś zrobił go bez klas. Natomiast w przypadku klas odrób lekcje i spróbuj zrozumieć fundament na jakich opiera się programowanie obiektowe. Tutaj polecam książkę: [4]
Inaczej użycie wybranego narzędzia mija się z jego przeznaczeniem.
Wykorzystując spreparowane wycinki HTML zawierające różne możliwości błędu ? Czy da się zrobić to prościej ?
Podziel kod na mniejsze funkcje / klasy. Najlepiej takie, które potrafią działać w próżni. Wówczas uzyskasz prostszy kod do testowania. Twoje funkcje charakteryzuje to, że robią za dużo zadań i sprawdzenie czy poprawnie działają zabierze Ci znacznie więcej czasu, a i też utrudni zapis samych testów.
[0] - https://helion.pl/ksiazki/sql-sztuka-programowania-stephane-faroult-peter-robson,sqlszp.htm#format/e
[1] - https://helion.pl/ksiazki/rails-projektowanie-systemow-klasy-enterprise-dan-chak,raprsy.htm#format/d
[2] - https://helion.pl/ksiazki/100-sposobow-na-sql-andrew-cumming-gordon-russell,100sql.htm#format/e
[3] - https://begriffs.com/posts/2017-08-01-practical-guide-sql-isolation.html
[4] - https://helion.pl/ksiazki/adaptywny-kod-zwinne-programowanie-wzorce-projektowe-i-solid-ne-zasady-wydanie-ii-gary-mclean-hall,adakod.htm#format/d
JaluJakub