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:

  1. 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
  2. Pobrane dane "źródłowe" zapisać do pliku i wysłać gdzies tam
  3. 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.
  4. 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
  5. Sformatowane dane należy zapisać w systemie
  6. 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?