Czołem,
załóżmy, że mamy aplikację do zarządzania kinem, seansami w nim i sprzedażą biletów na seanse. Sala kinowa, film, seans i bilet są w osobnych modułach - komunikują się DTOsami, a w środku operują na modelach domenowych. Zależności między modułami wyglądają tak:
+--------------+
| |
| |
| Sala +<-----------------+
| | |
| | |
+--------------+ +-------+---------+ +------------------+
| | | |
| | | |
| Seans +<----------+ Bilet |
| | | |
| | | |
+---------------+ +--------+--------+ +------------------+
| | |
| | |
| Film +<-----------------+
| |
| |
+---------------+
Przyjmijmy, że bilet oznacza sprzedane miejsce na konkretny seans. Jego model ma w sobie między innymi cenę i ID seansu, natomiast seans ma IDki filmu i sali.
Teraz problem: chcę wyciągnąć spis wszystkich sal i przychody, jakie wygenerowały przez ostatnie X czasu z biletów. Taka operacja wg mnie powinna się znaleźć w module z biletami, ale ten z kolei nic nie wie o istnieniu sal. Jak powinienem to zrobić?
- Dodać moduł Sala jako zależność modułu Bilet i wtedy
a) Dodać ID sali do modelu biletu i wtedy wszystko się staje banalne,
b) Skoro Bilet wie o Seansach i Salach, wyciągnąć wybrane sale, potem wszystkie seanse które się odbywały w tych salach i są z interesującego mnie przedziału czasu, zliczyć dochód z tych seansów i na podstawie sali przypisanej do seansu policzyć dochód dla każdej sali - Nie dodawać zależności i wykorzystać to, że publiczne DTO seansu zawiera pole z ID sali i na tej podstawie policzyć dochód dla każdego seansu a potem dla każdej sali (rozwiązanie podobne do 1b, ale czy faktycznie wtedy można uznać, że moduł Bilet nie zależy od modułu Sala?)
- Olać granice między modułami i napisać SQLa który zrobi wszystko za mnie
czy może jeszcze inaczej? Może taki podział, jaki zrobiłem, nie ma sensu - jak w takim razie mógłbym taką aplikację podzielić na moduły?