@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
@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
if labelText == '': raise ValueError('Cannot create task from empty String!') except ValueError as e: print(e) else:
łodafak ja bym zrobił: if not isinstance(labelText, string) or not labelText: raise ValueError('Cannot create task from empty String!') # jak kto woli, ja bym tu zwracał none albo coś i dalej ciągniesz bez elsa
Ad. 3 Wiem o co Ci chodzi ale nie mam bladego pojęcia w jaki sposób powinienem to rozbić...
@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ć obiekt Persistance z metodami read() i save().
@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
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 :)
Dzięki wielkie za poświęcony czas :)
if labelText == '':
raise ValueError('Cannot create task from empty String!')
except ValueError as e:
print(e)
else:
łodafak ja bym zrobił:
if not isinstance(labelText, string) or not labelText:
raise ValueError('Cannot create task from empty String!') # jak kto woli, ja bym tu zwracał none albo coś
i dalej ciągniesz bez elsa
@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()
isave()
.@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.