Зависимость классов между собой
Ребят, нужно сделать зависимость классов между собой .... как назвать это правильно я хз, объясню на пальцах:
class Film { constructor(name, mainArtist, song){ } }; class MainArtist{ constructor(name, film, song){ } }; class Song{ constructor(name, mainArtist, film){ } }; Не суть в создании классов, по быстрому накидал, что в голову пришло. Вот у меня есть класс фильм, класс главный актёр и класс песня. Допустим я их экспортировал в другой файл и: let Titanik = new Film("Titanik", Dikaprio, MyHeartWillGoOn); let Dikaprio = new MainArtist("Dikaprio", Titanik, MyHeartWillGoOn); let MyHeartWillGoOn = new Song("MyHeartWillGoOn ", Dikaprio, Titanik); Как вы уже догадались , мне необходимо что бы у этих классов была зависимость. Что бы в Титаник, я добавил класс Дикаприо и МайХертВиллГоОн, и мой класс титаник, автомотически добавился в конструктор в this.film к остальным двум классам .... ну и так в общем то со всеми свойствами. Заранее скажу, что делать вот так не надо: et Titanik = new Film("Titanik"); let Dikaprio = new MainArtist("Dikaprio"); let MyHeartWillGoOn = new Song("MyHeartWillGoOn "); Titanik.mainArtist = Dikaprio; Titanik.song = MyHeartWillGoOn; Dikaprio.film = Titanik; // и тд в этом духе... Вот как вижу это я , но не знаю пока как реализовать ( зеленый совсем) : let Titanik = new Film("Titanik"); let Dikaprio = new MainArtist("Dikaprio", Titanik); let MyHeartWillGoOn = new Song("MyHeartWillGoOn ", Dikaprio, Titanik); // и получается, что в Titanik и Dikaprio недостающие свойства сгенерируются автоматом Классы представлены как разные модуль - т.е. в разных файлах ... ЗАРАНЕЕ ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ ! |
Штука, которую ты замыслил, называется DI (внедрение зависимостей).
В данном конкретном случае, два объекта из трех будут доработаны напильником после конструирования. Подумай ещё раз, нужны ли тебе циклические ссылки. Обычно они не нужны. Здесь, например, ссылки между артистом и песней выглядят бредово. Песня сама по себе, артист сам по себе. Фильм на них ссылается весьма органично - у него конкретная песня и конкретный артист (хотя артистов может быть несколько на главной роли, но это ладно). В то же время песня может быть в более чем одном фильме, и артист со своей главной ролью тоже - соответственно у них логичнее сделать не ссылку на фильм, а массив фильмов. Но это так, лирика. А в целом, DI через конструктор - никаких циклических ссылок. |
Цитата:
Я же говорю, на логику конкретных(указанных мной) классов не особо нужно обращать внимание , в реале совсем другие классы, просто всё гораздо сложнее и объяснение идеи делу не поможет) Мне смысл надо, что б был такой, какой я описал... Спасибо еще раз инфу, сейчас буду разбираться что за DI и с чем его употреблять) |
worldsering, если ты хочешь хранить в неких ключах объекта другие объекты - тебе придется делать их клоны.
Иначе ты будешь хранить ссылки на созданный экземпляр объекта... Если в ключе нужно хранить несколько объектов - это уже будет массив таких объектов. Будь то список актеров фильма... Или список фильмов у актера... |
Цитата:
|
Цитата:
|
Цитата:
ну смысл такой, мол зачем всем классам всё прописовать в руке, это куча куча куча когда, когда я хочу, что бы свойства сами прорастали, я на картинке описал https://files.fm/thumb_show.php?i=tt7ryjtd7 |
Цитата:
В СУБД для связи "фильмов" и "артистов" делают еще одну таблицу, куда прописывают ссылки на артиста и фильм. Потом через ту таблицу всю информацию можно получить в обе стороны. А ты задумал нечто не сусветное... :blink: |
Цитата:
Ну тогда как сделать это лучше всего ? Можно поподробнее ? Я хочу что бы мои классы содержали связные с ними классы |
Цитата:
Цитата:
Но для таких "связей" вполне достаточно прописать ссылку на класс1 в любой ключ класса2 и наоборот. Тогда через эти ключи ты получишь "кругооборот" классов относительно друг друга... ;) |
Часовой пояс GMT +3, время: 04:33. |