W jaki sposób bym nie myślał i jak bardzo wszytko udziwniał zawsze kończy się tak samo. Program składa się danych, logiki i gui. Kropka.
Nie mogę dojść do rozwiązania problemu, ciężko mi znaleźć mocne argumenty dla jednej czy drugiej opcji.
Otóż:
( Abstrakcyjny przykład, zeby lepiej sobie zobrazować problem )
- Klient ( użytkownik ) wybiera spośród dostępnych zabudowań ( GUI ) budynek ( kontrolka/okno ) i zgłasza swój akces
- Logika ( urząd/administracja ) przyjmuje zlecenie ( GUI->assigned_logic->Notify( REQUEST_ACCESS ) ) po czym pobiera od klienta niezbędne informacje ( np. Logic->control->GetValue( DataBuffer& new_data ) ).
- Urząd(logika) sięga po aktualne informacje o budynku z bazy danych ( np. Logic->DBObject->GetData( DataBuffer& actual_data ) )
- Urząd(logika) weryfikuje poprawność danych i wniosku ( czy są wolne lokale, wysokość czynsz itp. ) oraz pyta klienta o potwierdzenie (opcjonalnie), ewentualnie dodatkowe informacje.
- Jeśli wszystko jest ok urząd(logika) dodaje nowego lokatora do bazy danych ( np. Logic->DBObject->Save( new_data ) )
- Zdarzenie kończy się sukcesem i wraca do modułu logiki z danymi potrzebnymi do zaktualizowania interfejsu graficznego. W międzyczasie baza danych zapisuje cały łańcuch operacji jakie zostały wykonane w ramach tego zadania w celu możliwości
prostego przywrócenia poprzedniego stanu ( Undo/Redo )
Kto aktualizuje strukturę bazy danych? Urząd(Logika) czy baza danych ?
Przyjmijmy, że baza danych jest zaimplementowana w postaci grafu. Węzeł STREET posiada połączenia typu/o wadze ADDRESSED_BUILDNGS, węzły BUILDNG są przyłączone do ulicy łączem typu ADMIN_STREET. Dodatkowo każdy budynek posiada łącza do wszystkich lokatorów zamieszkujących dany budynek. ( OCCUPIED_BY / LIVE_IN ). W bazie istnieją również obiekty typu SCHOOL, HOSPITAL, ADMINISTRATION, etc.
Po zdarzeniu zameldowania nowego lokatora kto "łączy" go z obiektami użyteczności publicznej w okolicy i jednocześnie "odłącza" od obiektów do których był przypisany przed przeprowadzką? Czy to moduł Logiki ma pobierać dane o użytkowniku oraz jego "kontaktach" by zadbać o poprawne połączenia czy baza danych ma to zrobić automatycznie po otrzymaniu żądania zmiany zameldowania?
Niby GUI powinno odpowiadać wyłącznie za wizualizację danych, ale jednak posiada jakąś tam hierarchię okien, pozycję czy proporcję. Czy baza danych powinna działać podobnie tzn. oprócz funkcji przechowywania suchych danych powinna "wiedzieć więcej" i wewnętrznie dostosowywać się do zdarzeń zachodzących w aplikacji czy powinna jedynie udostępniać jakiś tam interfejs logice, która by o to dbała?