Witam,
Jak zwykle mam problem z podstawami...
Mam taki temat:
Program, który działa jako zadanie automatyczne (czyt. bez GUI), który ma wykonać następujące zadania:
- Pobrać dane z zewnętrznego systemu z wskazanej lokalizacji (jakies tam zapytanie do bazy);
zakres danych to mniej wiecej ID_osoby, imie, nazwisko, data, start, koniec - Pobrane dane "źródłowe" zapisać do pliku i wysłać gdzies tam
- Wstępnie przetworzyć dane "źródłowe"
przetworzenie obejmuje sprawdzenie czy istnieje osoba o takim id_osoby, format danych itp.
sprawdzenie czy dane źródłowe dla danej osoby różnią się od danych istniejących już w systemie.
Jeśli nie różnią się to nie przetwarzamy dalej tej osoby. - Przeformatowanie danych źródłowych do postaci zgodnej z formatem wewnętrznym systemu
algorytm tego formatowania jest niepewny. tzn. w miarę jak będą pojawiać się nowe okoliczności biznesowe, to algorytm może się zmieniać ale zawsze format wyjścia będzie taki sam - Sformatowane dane należy zapisać w systemie
- Na koniec należy wykonać odpowiednie przeliczenia (nie istotne jakie) i zapisać je do pliku i wysłać gdzieś tam
Oprócz tego mam zapisywać do logu w bazie danych pewne informacje po każdym lub w trakcie wykonywania każdego z opisanych kroków. Nie opisałem dokładnie wszystkich szczegółów, bo są one nieistotne z punktu widzenia architektury rozwiązania.
Czyli to co opisałem to klasyczny jednokierunkowy interfejs pomiędzy dwoma różnymi systemami przetwarzającymi te same informacje:
<źródłowa b.d.> ----> pobranie danych ----> walidacja danych ----> zapis danych ----> <docelowa baza="baza" danych="danych">
To co udało mi się z tego zdekomponować to następujące obiekty:
- kalendarz
- pracownik
- raport
- ustawienia
- log_aplikacji
odpowiedzialności:
-
kalendarz
- przechowuje dane dot. jednego pracownika: czyli tabelka (data start, end)
- wykonuje algorytm przeformatowania danych na format wewnętrzny
- umożliwia porównanie danych ktore przechowuje z danymi tego samego pracownika w bazie danych systemu
-
pracownik
- zapewnia możliwosc pobrania kalendarza z systemu wewnetrznego
- zapewnia mozliwosc zapisania nowego kalendarza w systemie ( w bazie danych)
-
raport
- umozliwia utworzenie pliku z wynikiem dzialania raportu
- umozliwia wyslanie pliku mailem
W opisie mam dwa raporty, które wykonują inne zestawienia ale częścią wspólną jest to że wynik zapisują do pliku,
który wysyłany jest mailem.
-
ustawienia
- przechowuje ustawienia dla połaczenia z bazami danych systemów zewnętrznego i wewnętrznego
- przechowuje inne ustawienia, które na obecnym etapie nie są jeszcze zauważalne
-
log_aplikacji
- zapisuje niezbędne informacje do logu aplikacji (w bazie danych)
Brakuje mi też obiektu, który pobierałby dane z systemu zewnętrznego i z nich budował obiekty kalendarzy.
To byłby taki kreator kalendarzy, albo "downloader" nie wiem jak to nazwać nawet ale to coś miałoby pobrać dane i wstępnie je przeanalizować.
Z kolei obiekt kalendarza musi odzwierciedlać dane źródłowe ale też dane z systemu wewnętrznego dla tej samej osoby. Też nie wiem, czy to ma być jeden i ten sam obiekt tylko bardziej uniwersalny czy dwa różne obiekty (dwie różne klasy)
Jeśli chodzi o ten algorytm z punktu 4. to wymyśliłem, że zastosuję wzorzec strategii i przy tworzeniu obiektu kalendarza będę mu przekazywał instancję obiektu, który implementuje konkretny algorytm w ten sposób nie bede musiał zmieniac klasy kalendarza a tylko podmieniać obiekt implementujący dany algorytm na inny
jesli chodzi o raporty to czy właściwe jest użycie wzorca obserwator ( raport "obserwuje" czy obiekt pobierający dane zakończył pobranie danych, raport drugi obserwuje czy przetwarzanie danych zakończyło się )
Bardzo proszę o pomoc i opinię czy mój tok myślenia jest poprawny?