Używanie akcesorów vs modyfikator public w Androidzie

0

Zastanawiam się czy stosowanie getterów i setterów w Androidzie jest prawidłowe. O używaniu ich w samej Javie czytałem różne opinie.
Tutaj http://developer.android.com/training/articles/perf-tips.html#GettersSetters jest napisane, żeby ich unikać. Chciałbym poznać zdanie bardziej doświadczonych programistów. Wy stosujecie modyfikatory public czy akcesory? Z tego co wiem, to "public" powinno się stosować tylko wtedy gdy jest to konieczne, z drugiej strony uważam, że akcesory "zaśmiecają" kod.

0

Avoid internal Getters/Setters

Czytaj do skutku.

2

Abstrachując od tego co napisał @spartanPAGE. Warto się zastanowić czy w ogóle potrzebujesz w swoim kodzie getterów i setterów. Stosowanie getterów tylko po to by dostać się do wnętrza obiektu przeważnie mówi, że coś jest nie tak z architekturą aplikacji. Stosowanie setterów przeważnie oznacza, sporą ilość stanów w aplikacji - sytuacja jeszcze gorsza. Przeważnie można wyeksponować tylko minimalną ilość stanu na zewnątrz, i enkapsulować zachowania obiektów.

Swoją drogą, niestosowanie getterów i setterów tylko ze względu na wydajność to dla mnie idealny przykład przedwczesnej optymalizacji - założę się, że jeżeli masz problem wydajnościowy, to leży on zupełnie gdzie indziej.

0

Problemów z wydajnośćią nie mam.
W activity głównym "A" tworzę menadżer obiektów "M". Z "A" wywołuję metodę w "M", która tworzy obiekt "O". Z "A" mogę przejść do activity "B", w którym mogę zarządzać ustawieniami tego obiektu. W tym celu najpierw muszę wyświetlić wszystkie obecne ustawienia "O" - wywołuję gettery w "M", które wywołują gettery w "O". Ustawienia zmieniają się dynamicznie tzn. gdy coś zmienię od razu widać efekty - używam setterów analogicznie do getterów. W "B" jest również button zatwierdzający te ustawienia - tu też używam setterów.

Nie wiem czy architektura jest prawidłowa, ponieważ to moja pierwsza tak rozbudowana aplikacja.
Tak sobie teraz pomyślałem, że może klasa "O" powinna dziedziczyć po "M"? :)

0

nic się nie da zrozumieć z tego co napisałeś. Ja osobiście stosuje gettery i settery tylko i wyłącznie w klasach typu DAO lub przechowyjących dane użytkownika (np jego tapetę, preferencje itp)

0

Może opiszę to bardziej ogólnie.
Mam klasę Manager, w której jest lista obiektów i akcesory do pól tych obiektów. Każdy z tych obiektów ma pola odpowiadające za ustawienia tego obiektu.
Kiedy z jakiejś innej klasy chcę zmienić lub wyświetlić/użyć ustawień danego obiektu wywołuję w menadżerze odpowiedni akcesor.
Mam nadzieję, że teraz jest w miarę zrozumiale.

0

napisz sobie w menagerze funkcję modyfikującą dany obiekt, a nie wyciągaj obiekt i go modyfikuj :-)

0

Nie bardzo rozumiem.
Ja nie wyciągam danego obiektu, tylko jego poszczególne ustawienia. Tak samo ze zmienianiem ustawien - zmieniam jego poszczególne ustawienia. Np w jednej klasie zmieniam powiedzmy kolor obiektu (setColor), a w innej kolor, wymiary i prędkość (setColor, setDimensions, setSpeed). Tak samo w jednej klasie chcę wyświetlić np. tylko kolor (getColor), a w innej wszystkie ustawienia (analogicznie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1