@matiit: po krótkich poszukiwaniach odnalazłem coś takiego: https://www.python.org/dev/peps/pep-0008/#id33 w sumie zastanawiam się jak i czy powinienem to poprawić... W chwili obecnej wygląda to dość dobrze bo metody mam w snake_case a zmienne w camelCase chyba...
1. Testy automatyczne. Skąd mam wiedzieć czy Twój kod w ogóle działa? 2. Też irytuje mnie mieszanie camelCase ze snakecase 3. https://en.wikipedia.org/wiki/Single_responsibility_principle – masz widgeta, który w tej chwili wie jak robić dwie rzeczy na raz: zarządzać taskami i zapisywać swój stan. Jak rozpoznać, że się narusza SRP? Pomyśl jakie zmiany mógłbyś chcieć wprowadzić. Np mógłbyś chcieć zmienić format zapisu z JSONa. Albo w ogóle pisać do bazki. Jednocześnie możesz chcieć dołożyć zatrzymywanie tylko określonych tasków, zamiast wszystkich na raz. To dwa zupełnie oddzielne aspekty. Powinny być reprezentowane przez dwa różne obiekty. 4. Wydaje mi się, że konwencją jest dawać metody magiczne (__init__, __str__
@MacDada Ad. 1 To jeszcze nie ten poziom chyba :P ale fakt dopisze testy jednostkowe jak poczytam o tym. Ad. 3 Wiem o co Ci chodzi ale nie mam bladego pojęcia w jaki sposób powinienem to rozbić... Ad. 5 Dobrze, że w ogóle wydzieliłem to jako metodę, wcześniej wszystko było w on_start :D
@Blade: dodam tylko, że kod rozbity na małe metody łatwiej się testuje. Nie dość, że masz mniej przypadków do rozpatrzenia dla każdej metody, to jeszcze łatwo je mockować. Ale to jak poczytasz o testowaniu :)
Kod znajdziecie tutaj: https://github.com/BeardyBarber/TaskTimer
Krótko o aplikacji:
Tworzysz zadania i odliczasz czas jaki zajęło Ci wykonania danego zadania.
1. Testy automatyczne. Skąd mam wiedzieć czy Twój kod w ogóle działa?
2. Też irytuje mnie mieszanie camelCase ze snakecase
3. https://en.wikipedia.org/wiki/Single_responsibility_principle – masz widgeta, który w tej chwili wie jak robić dwie rzeczy na raz: zarządzać taskami i zapisywać swój stan. Jak rozpoznać, że się narusza SRP? Pomyśl jakie zmiany mógłbyś chcieć wprowadzić. Np mógłbyś chcieć zmienić format zapisu z JSONa. Albo w ogóle pisać do bazki. Jednocześnie możesz chcieć dołożyć zatrzymywanie tylko określonych tasków, zamiast wszystkich na raz. To dwa zupełnie oddzielne aspekty. Powinny być reprezentowane przez dwa różne obiekty.
4. Wydaje mi się, że konwencją jest dawać metody magiczne (
__init__
,__str__
Ad. 1 To jeszcze nie ten poziom chyba :P ale fakt dopisze testy jednostkowe jak poczytam o tym.
Ad. 3 Wiem o co Ci chodzi ale nie mam bladego pojęcia w jaki sposób powinienem to rozbić...
Ad. 5 Dobrze, że w ogóle wydzieliłem to jako metodę, wcześniej wszystko było w on_start :D
Ad. 2/4 OK do zmiany
if labelText == '':
raise ValueError('Cannot create task from empty String!')
except ValueError
@Blade: Tam gdzie masz metodę
pickle_all()
zwracaj same dane. Tam, gdzie ją odpalasz, użyj obiektu, który zapisze.Zauważ, że w
TimerApp
masz z kolei wczytywanie tych danych i zamianę na obiekty. Możesz z obu operacji zrobić obiektPersistance
z metodamiread()
i@Blade: no niestety:
https://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables
I to też należy odnieść do zmiennych wewnątrz "normalnych" funkcji.