@Riddle dzięki, na Ciebie czekałem (serio :P)
Ogólnie chodzi o to, że Playlist czy Track to rozbudowane rzeczy w gruncie rzeczy. Są w pewien sposób ze sobą powiązane ale czy muszą?
Playlista ma mały sens bez Track - tu się zgadzam - większość, rzeczy w Playlist jest oparte na Track - z tym, że Track mógłby istnieć bez Playlist więc dlaczego z poziomu Track wiązać go z Playlist?
Tracki mają wiele różnych implementacji i działają bez Playlist, Playlista to tylko takie "rozszerzenie" funkcjonalności aplikacji. Po części zgadzam się, że chcę to zrobić "bo tak trzeba" ale też z tego względu, że mam złe doświadczenie z bardzo rozrośniętymi modułami i szukam sposobu na pogrupowanie tego
Rozumiem. Czyli track może być bez playlisty, ale może też ją mieć; chcemy uniezależnić track od playlisty, ale track chce mieć takie informacje jak czy nazwa playlisty w której się znajduje.
(np. czy track znajduje się w danej Playliscie, jej nazwę itd).
Ja w takim wypadku poleciłbym Ci wymyślenie nowego słowa, nowego konceptu które mogłoby być między playlistą a trackiem. Dobrze byłoby wymylić jakieś słowo/koncept żeby to określić. To może być nazwa w stylu: catalog, playlistItem, collection, tracklist, lineup, album, etc. Wtedy byłaby relacja:
Kopiuj
track -> PlaylistItem <- playlist
Taki PlaylistItem mógłby wyglądać np. tak: interface PlaylistItem { bool hasPlaylist; ?string playlistName; ?string playlistAuthor; string[] otherPlaylistsWithTrack }. Track mógłby zależeć od PlaylistItem - z niego brałby info w jakiej playliście jest i jak się nazywa ta playlista; a playlista dostarczałaby info o sobie i swojej nazwie do playlistItem. W wypadku tracku który nie jest w playlisćie, track mógłby dostać PlaylistItem który ma hasPlaylist=false a pozostałe atrybuty np. null albo pusty.
Oczywiście pola możesz zaprojektować do woli. W skrócie - wszystkie dane które mają "przejść" między playlistą a trackiem, wsadź do tego obiektu.
Tak na prawdę nie ma złotego środka na ten problem - wymaga to po prostu zaprojektowania relacji między elementami które masz 