Ocena aplikacji do portfolio

1

Chciałbym Was prosić o code review aplikacji na androida, która ma być w moim portfolio do szukania pracy jako junior dev. Aplikację wrzuciłem już na sklep Google Play, więc można śmiało pobrać i przetestować.

https://github.com/sirconceptz/Pantry
https://play.google.com/store/apps/details?id=com.hermanowicz.pantry

Dzięki z góry za oceny, krytyczne również (w końcu nie ma lepszej oceny jak spojrzenie innej osoby na Twoją pracę).

1

Popracuj trochę nad wyglądem aplikacji i jakoś fajnie ja zaprezentuj. Ludzie oceniają oczami

A i masz okropny bałagan w kodzie

0
Citroen napisał(a):

Co to za technika zaciemniania kodu?
https://github.com/sirconceptz/Pantry/blob/master/app/src/main/java/com/hermanowicz/pantry/MyPantryActivity.java

Powiesz konkretnie czy mam zgadywać o co chodzi?

2

Kod nie ma żadnych testów. https://github.com/sirconceptz/Pantry/blob/master/app/src/test/java/com/hermanowicz/pantry/PantryTests.java - czy byłbyś otwarty na propozycję odkupienia tych kopyrajtów? ;)

Brak podziału na warstwy aplikacji - logika biznesowa bezpośrednio w Activities. "Boskie obiekty" do wszystkiego, widok zajmuje się generowaniem pdf'a, DialogManager na 1000 linii.

W licznych miejscach wychodzi słaba znajomość Android SDK - jak stosowanie printStackTrace do logowania wyjątków, albo odwołania do getString poprzez getResources zamiast bezpośrednio (w kodzie Activity). Metody set... klasy NotificationCompat.Builder zwracają instancję samego buildera, po to właśnie, aby je łączyć na zasadzie fluent interface, i nie robić w każdej linijce tej czkawki builder., builder., builder.. Takie niuanse to może drobiazgi, ale w nagromadzeniu zaczynają być znamienne.

Nie jest moim zdaniem najlepszym pomysłem zrzucenie wszystkich używanych w aplikacji stałych do jednego, globalnego wiadra, bez względu na rzeczywiste miejsce ich użycia.

Nazewnictwo niezgodne z androidową konwencją: identyfikatory widoków pisane pascal casem (ProductVolume, ProductWeight).

Zamiast ListView lepiej byłoby używać RecyclerView - to nie tylko moja opinia, ale także zalecenie oficjalnej dokumentacji.

Część decyzji w kwestii formatowania jest, można powiedzieć, tyleż artystyczna, co kontrowersyjna - wyrównania pionowe, taki ASCII art, jak przypuszczam.

Zasadniczo nie powinno się wersjonować całego folderu .idea, bo są tam śmieci w rodzaju cache'a twojego Android Studio, co nie powinno być nikomu z zewnątrz potrzebne.

Aplikacji nie odpalałem, ale na podstawie zrzutów można powiedzieć, że pod względem interfejsowym nie robi szczególnie dobrego wrażenia. Nie za bardzo odpowiada standardom platformy, chyba że z epoki Androida 2.x. Pomijając warstwę wizualną, nie umieszcza się w aplikacjach androidowych komendy "CLOSE APPLICATION" - czy widziałeś coś takiego w jakiejkolwiek innej apce?

Poziom kodu jest plus minus taki, jakiego można by się spodziewać od kogoś bez żadnego doświadczenia. Natomiast nakład pracy widać, że duży.

Na plus trzeba policzyć, że projekt jest nietrywialnych rozmiarów, że jest umieszczony w storze, i że wykorzystuje różne możliwości platformy - obsługa notyfikacji, skanowanie kodów, i18n. Jako bilet do pierwszej pracy według mnie powinien wystarczać, zważywszy, że większość konkurentów nie będzie miała żadnego portfolio.

Na kolana natomiast nie powala, głównie ze względu na niedostatki architektury i brak testów. Zająłbym się tymi kwestiami, w tej właśnie kolejności - bo bez normalnej architektury trudno o pisanie testów. Na dobry początek poczytałbym o wzorcu Model-View-Presenter i spróbował przerobić aplikację w tym kierunku. Inne opcje (MVVM, MVI) mają nad nim pewne przewagi, ale MVP jest najprostszy w implementacji, więc od niego bym chyba zaczął.

1

butterknife sobie ogarnij

0
m123 napisał(a):

butterknife sobie ogarnij

Pisali mi już o tym na forum Androidowym, ale dzięki bardzo za pomoc. Dorzucę do projektu.

0

Zajrzałem na chwilkę, ale jak zobaczyłem ciąg try catch to mi się odechciało.
Dla mnie to jest antyreklama.
Szczególnie jak widzę, że te catch łapią NullPointerException

0
m123 napisał(a):

butterknife sobie ogarnij

Gdy próbuję dodać tę bibliotekę podczas kompilowania wyskakuje błąd:

More than one file was found with OS independent path 'META-INF/androidx.versionedparcelable_versionedparcelable.version'

Szukałem na Stackoverflow, googlach, itp., ale nic konkretnego nie znalazłem. Nie można "exclude" tego katalogu, ponieważ wyskakuje jeszcze więcej błędów.

Kilka osób zalecało mi też przesiąść się z SQLOpenHelper na Room, jednak w Roomie trzeba podawać stałe zapytania do bazy danych, a ja mam metodę do budowania zapytania zależnie od tego jakie użytkownik poda parametry produktów (np. soki od 300 do 500ml bez cukru). W googlach piszą, żeby zapytania wyszukiwania nie pisać ręcznie (jak ja) tylko, by używać bibliotek za to odpowiedzialnych, lecz nie wiem zbytnio jak się za to zabrać. Room z tego co widzę wymaga stałych zapytań (bez możliwości modyfikowania dynamicznie przez kod). Na razie chcę przerzucić aplikację na MVP, aby móc napisać testy (wcześniej nie wiedziałem jak je napisać przy tym bajzlu :P) i zrobić kod czytelnym.

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