Wpis z mikrobloga

OK, zgodnie z obietnicą, cotygodniowa aktualizacja.
Zapiernicz w pracy i bobo w domu mocno ograniczyły mi czas w tym tygodniu, więc prace posuwają się w tempie ślimaka wyścigowego. Co zatem się udało. Zgodnie z sugestą @mamapoth zrezygnowałem z używania zmiennych zmiennoprzecinkowych do przechowywania informacji o kasie. Popatrzyłem za info w sieci (thank you Stackoverflow!) i najłatwiej - chociaż z punktu widzenia wydajności programu, niezbyt optymalnie - będzie sprawę ogarnąć używając BigDecimal - tu artykuł o tym W przybliżeniu klasa ta pozwala na wykonywania obliczeń o dużej dokładności, a później zaokrąglania wyników zgodnie ze zdefiniowaną dokładnością i regułami.

Jak już pisałem, czytam Roberta C. Martina, Czysty Kod (dotarłem do połowy książki), w kolejce mam jeszcze parę innych prac. Wczoraj napisałem sobie w ramach treningu prosty parser tekstu, który przyda mi się w robocie, ułatwiając nudną pracę. Mam 40-stronicowy plik, w miarę jednolicie sformatowany, zawierający nazwiska autorów piszących do czasopisma wydawanego przez wydział, którym pracuję, i adresy URL do ich profili w bazie nauka polska. Wszystko to musi trafić na stronę internetową. Zamiast ręcznie klepać <p class="... <a href="... napisałem programik, który robi to za mnie :-) Pierwsze #profity z nauki Java już zatem są :D

Parę rzeczy, nad rozkminieniem których zastanawiam się w głównym projekcie. Kto zaglądał na GitHub'a ten wie, ze mam klasę Item, która opisuje przedmiot przechowywany w magazynie (Storehouse) sklepu. Przedmiot ma w sumie 9 'właściwości'/zmiennych instancyjnych: 1. nazwę, 2. symbol PKWiU, 3. cenę zakupu, 4. cenę netto, 5. cenę
brutto, 6. ilośc, 7. jednostkę, w której ilość jest podawana (sztuka, kilogram, metr bieżący, opakowanie itd.) 8. stawkę VAT 9. marżę.

Myślę, że warto będzie z tego wyodrębnić klasę Price, która będzie przechowywać trzy wartości (purchaseValue, nettoValue, bruttoValue) i w konstruktorze wymagać podania dwóch wartości - ceny zakupu i ceny brutto, lub wszystkich trzech. Dodatkowo klasa będzie przechowywać informacje o marży, która jest związana z wartościami cen i która będzie automatycznie obliczana. Do niej trafią też metody obliczające ceny i marżę.

Taki zabieg będzie, wydaje mi się, wymagał wyodrębnienia również klasy oddzielnei opisującej podatek VAT. Zgodnie z sugestią, po raz drugi @mamapoth nie chcę hardokodować wartości podatku VAT, ale jednocześnie dobrze byłoby przechowywać informację, do której grupy podatkowej dany przedmiot należy, mając przy tym możliwość łatwej zmiany wartości przypisanej do danej grupy. Dla niezorientowanych: grup podatkowych jest pięć pierwsza(0%), druga(8%), trzecia(23%), w której znajduje się 95% sprzedawanych w sklepie teściów przedmiotów, czwarta (zwolniony) i piąta (5%). Widziałbym to tak, że w momencie zmiany danej stawki, np. z grupy trzeciej, cena brutto wszystkich towarów jest z automatu przekalkulowywana (obserwator?).

Z innej beczki I. Program ma korzystać z SQLite, więc muszę koniecznie ogarnąć jakiś framework, który ustrzeże mnie przed pisaniem zapytań z palca (pisał o tym @ufik78). Jesli nie Hibernate, to co? A jeśli Hibernate to od czego warto zacząć? :-)

Z innej beczki II. Pobrałem i zainstalowałem, tu ukłony należą się znó dla @ufik78), IntelliJ Idea Community Edition i wygląda na to, że przy nim pozostanę, przynajmniej przez jakiś czas. W porównaniu z Eclipse Luna, z którego dotychczas korzystałem i do którego zdążyłem nawyknąć, IntelliJ odczuwalnie wolniej kompiluje i odpala programy, szczególnei jeśli jest to pierwsze uruchomienie. Sprawdziłem na dwóch różnych kompach (starym Dell'u studio z 4GB RAM i Core 2 Duo @ 2.1Ghz i stacji roboczej HP z i5, nie pamiętam jednak dokładnie jaką) i w obu IDE na poczatku trochę przymulało indeksując pliki, żeby później działać przyzwoicie. Mam jednak wrażenie, że system podpowiedzi i edycji kodu, stopień dopracowania interfejsu i z mojego punktu widzenia rzecz istotna, estetyczna strona programu (w końcu mogę ustawić w pełni całości ciemny motyw + tryb pełnoekranowy) kładą Eclipse'a na łopatki. A jakie są wasze doświadczenia z różnymi IDE?

#java #programowanie #kitkeprogramuje
  • 48
@kitke: Co do IDE to IntelliJ nie ma sobie równych; niektórzy twierdzą, że Eclipse góruje ale tylko i wyłącznie dlatego, że nie znają możliwości IJ :) zazwyczaj wystarcza mi 5 min show-and-tell by przekonać każdego zatwardzialca :D

Generalnie nie wiem co robisz, bo widzę po raz pierwszy Twój wpis, ale wydaje mi się, że uczysz się Javy - propsy. Nauka programowania to zawsze plus.

Co do nazw zmiennych, nie używaj anglopolszczyzny
@kitke: miło słyszeć, że w czymś pomogłem. Co do hibernate to nie mogę nic polecić, bo używałem go ostatni raz jakieś dwa lata temu, ale trudne to nie jest. O ile pamiętam używało się tam singletona, więc będzie kolejny (podobno anty) wzorzec. Korzystałem z kilku IDE i JetBrains króluje wg mnie.
Życzę powodzenia i wytrwałości.
@mamapoth: Jeśli chodzi o stawki VAT, to księgowa magia. Będąc w stawce zerowej faktycznie nie płacisz podatku, ale zachowujesz prawa do odliczeń podatkowych, ma to tez wpływ na wysokość kosztów uzyskania przychodu. Wikipedia o sprawie.
A propos IDE, teraz mi przyszło do głowy. Wąskim gardłem może być dysk zewnętrzny, na którym trzymam projekty. Niby na USB 3.0 w robocie / eSATA w domu, ale mimo wszystko.
@kitke: dysk zewnętrzny jest zawsze wąskim gardłem przy kompilacji; na laptopie mam SSD w pracy zwykłe SATA 2/3 (?) i różnica jest kolosalna, pomimo tego, że mam lepszy proc i więcej ram w pracy :)
@mamapoth: niekoniecznie, singletony sprawdzają się świetnie w niektórych sytuacjach, gdzie potrzebujesz mieć jedną instancję na całą aplikację/scope; przykład - KeyboardController, którego mógłbyś pytać czy wciśnięty jest obecnie przycisk X :)

jeżeli nie masz DI, albo posiadasz DI, które nie jest wstanie wstrzyknąć instancji w dowolne miejsce (różne języki różne implementacje) to wtedy taka klasa się przydaje
@mamapoth: Ot dokładnie. Jak jest stawka 0 to podatek jest, ale go nie ma. A skoro jest, to jesteś płatnikiem (co prawda nie płacisz, ale podlegasz opodatkowaniu) itd. itp. :D Może znajdzie się się wśród Mirków spec, który nam to wyjaśni? ;-)
@mamapoth: nie chodzi o wymuszenie posiadania jednej instancji a o globalną dostępność.
DI może nie mieć wstępu bo implementacja DI zależy od frameworku; nie cały świat jest zbudowany na springu :)