Wpis z mikrobloga

@krasnoludkolo: Tak, repo zapisuje i udostępnia obiekt lub ich kolekcję.

Z czego „zapisuje” to tak jakby „w domyśle” – bo wyobraź sobie, że pamięć nie jest problemem, aplikacje żyją wiecznie i cała aplikacja siedzi w RAMie. Tak właśnie należy traktować repo – jako miejsce, które te dane przechowuje. Ale, że żyjemy w świecie nieidealnym, to repo zazwyczaj udaje tę perfekcję przez zapisywanie i odczytywanie skądś (bazki, pliku, etc).
@krasnoludkolo: Nie, repo może mieć co najwyżej metodę zwracającą posortowaną kolekcję, np (pseudokod):

Collection tasksSortedByPriority = taskRepo.getAllSortedBy('priority');
Collection tasksSortedByPriority = taskRepo.getAllSortedByPriority();

Korzystający z repo nie może polegać na tym, że repo „pamięta” kolejność elementów w kolekcji:

// kolekcja tasków jest zwracana w domyślnej kolejności
Collection tasks = taskRepo.getAll();

// tutaj sortowanie tasks
sortTasks(tasks);

// to nie powinno nam dać posortowanych danych, ale kolekcję w domyślnej kolejności
Collection tasks2 = taskRepo.getAll();

Ale
@krasnoludkolo:

1. Robisz taskRepository.getTaskCollection().sortBy(SortType.NAME); – naruszając Law of Demeter. Osobiście nie traktuję tego jako „błąd” (też mi się zdarza), ale raczej staram się w takich przypadkach zastanowić czy na pewno to musi być w ten sposób.

2. Po co Ci settery 1 2 ? Jeśli te obiekty są wymagane do działania – wymagaj ich w konstruktorze. Settery możesz zostawić jeśli faktycznie będziesz chciał móc podmienić te obiekty później.

3. Taki
@krasnoludkolo: Pomyśl o tym jeszcze tak:

Jeśli robisz taskRepository.getTaskCollection().sortBy(SortType.NAME); to repo nie powinno się nazywać TaskRepository tylko TaskCollectionRepository – bo służy wtedy do przechowywania obiektów TaskCollection, a nie obiektów Task ;-)
W każdym razie kolekcja to oddzielny byt od repo – można element usunąć z kolekcji, ale nie powinien on automatycznie wylecieć też z repo.


W sumie automat byłby akceptowalny (jeśli chodzi o dodawanie/usuwanie), ale tylko w ten sposób, że kolekcja przyjmuje w konstruktorze repo – i jak usuwasz element na kolekcji – to kolekcja usuwa wtedy element na repo (kaskadowo).

Ale nie odwrotnie (że usuwanie z repo wywala automatycznie z kolekcji) i
@MacDada: dzięki wielkie ;) zajmę się tym wszystkim po powrocie ;)
na szybko co do pkt 2 i 3 to nie tworze tych obiektów przez new tylko pobieram z widoku (androidowe api) a ten drugi konstruktor wlasnie do tego jest (android se z niego korzysta)