Opis projektu, otrzymany od Maćka, wygląda tak:
„Chodzi mi o aplikację, która będzie monitorować moje wydatki i przychody. Sprawdzałem kilka rozwiązań online, ale są.. zbyt skomplikowane. Chcę po prostu uruchomić program, dodać pozycję i zamknąć program. W razie potrzeby otworzyć go znowu, wejść na ekran z podsumowaniem danego miesiąca i zobaczyć czy jestem na plusie czy minusie. Od roku robię to w excelu, jednak nie jest to najwygodniejsze. Podstawowe wymagania:
1) aplikacja desktop, najchętniej w WPF
2) wszystkie operacje chcę zrobić bez dotykania myszki – czyli skróty klawiszowe
3) aplikacja może chować się do tray i przy ponownym odpaleniu exeka sprawdzać czy jest już uruchomiona instancja – jeżeli tak, to pokazać tą, która jest aktualnie w trayu… ale to przyjemny bajer który nie jest mi konieczny, wystarczy na początek, że będzie jakieś zabezpieczenie przed uruchomieniem więcej niż 1 instancji aplikacji naraz
4) nie chcę instalować żadnego serwera baz danych, więc zostaje sqlite, slq server compact lub xml (chociaż xmla wolałbym uniknąć)
5) chcę nadawać wydatkom kategorie, tak aby w prosty sposób zobaczyć ile w danym miesiącu wydałem na benzynę, ile na alkohol a ile na rachunki
6) chcę móc zdefiniować wydatki “stałe” i zweryfikować wybrany miesiąc pod ich kątem… tzn. wiem, że co miesiąc muszę wydać X na mieszkanie, Y na ZUS, a Z na rachunek za komórkę i po wybraniu jakiejś akcji (np. “weryfikuj wydatki stałe”) chcę dostać info jeśli w którymś miesiącu zapomniałem uzupełnić którejś z tych pozycji”
Jak widać, chodzi o jak najprostszą i jak najwygodniejszą w obsłudze aplikację do monitorowania wydatków. Co do wypunktowanych wymogów:
ad. 1) Jako że projekt domyślnie ma być tworzony w .NET, uważam się za zwolnionego z dywagacji na temat wyboru systemu operacyjnego i środowiska programistycznego: korzystał będę Windows 7 i Visual Studio 2010. WPF na szczęście nie stanowi problemu, może jedynie taki, że daje spore możliwości na stworzenie miłego oku interfejsu użytkownika – a ja te możliwości będę starał się wykorzystać, co grozi powstaniem UI wypranego ze stylu i smaku.
ad. 2) Tutaj problem stanowić będzie zapewnienie wygody użytkowania. Postaram się unikać znanych z Visual Studio kalamburów typu ctrl+shift+F11, a stosować skróty intuicyjne. Nie wiem jeszcze, jakiż to intuicyjny skrót wywoła akcję „weryfikuj wydatki stałe”, jednak o tym myślał będę w późniejszej fazie projektu.
ad. 3) Obiło mi się o oczy takie coś jak NotifyIcon – dokładniej zajmę się tym, kiedy skończę warstwę logiki biznesowej i przejdę do projektowania interfejsu użytkownika.
ad. 4) Sqlite nie gości na moim dysku, xmla, zgodnie z sugestią, unikam. Microsoft SQL Server Compact 3.5 – wybieram cię!
ad. 5) Mówisz – masz: projektując bazę danych, będę pamiętał o polu Category przypisanym do wydatków i przychodów.
ad. 6) Przewiduję kwestie do rozstrzygnięcia: czy wydatek stały będzie uwzględniany zawsze, każdego miesiąca, czy będzie miał przypisany okres czasu, którego dotyczy? A może będzie traktowany tak samo jak wydatek jednorazowy, tylko dodawany będzie na początku każdego miesiąca?
Można zauważyć, że Maciek nie wymaga wyboru konkretnych technologii – jedynym wymogiem w tej kwestii jest zwolnienie go z potrzeby instalowania dodatkowych pakietów (pkt. 4). Wygoda przede wszystkim: skróty klawiszowe, nieskomplikowaność aplikacji (tzn. aplikacja ma być mniej skomplikowana niż słowo „nieskomplikowaność”); a przy tym tylko dwa wymogi co do funkcjonalności programu (pkt. 5 i 6). To daje mi sporą swobodę i pole do popisu przy projektowaniu, jednak zarazem napawa przeczuciem, że w trakcie pracy nad projektem niejednokrotnie pojawią się kolejne sugestie co do funkcjonalności, co z kolei zmusi mnie do przeprojektowania UI – niezbędnego, by utrzymać wygodę użytkowania. Cóż, klient na szpan.