Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2021, 18:08
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Зависимость классов между собой
Ребят, нужно сделать зависимость классов между собой .... как назвать это правильно я хз, объясню на пальцах:

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 недостающие свойства сгенерируются автоматом

Классы представлены как разные модуль - т.е. в разных файлах ...
ЗАРАНЕЕ ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ !
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2021, 18:28
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Штука, которую ты замыслил, называется DI (внедрение зависимостей).
В данном конкретном случае, два объекта из трех будут доработаны напильником после конструирования.
Подумай ещё раз, нужны ли тебе циклические ссылки. Обычно они не нужны. Здесь, например, ссылки между артистом и песней выглядят бредово. Песня сама по себе, артист сам по себе. Фильм на них ссылается весьма органично - у него конкретная песня и конкретный артист (хотя артистов может быть несколько на главной роли, но это ладно). В то же время песня может быть в более чем одном фильме, и артист со своей главной ролью тоже - соответственно у них логичнее сделать не ссылку на фильм, а массив фильмов.

Но это так, лирика. А в целом, DI через конструктор - никаких циклических ссылок.
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2021, 18:35
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Сообщение от Alexandroppolus Посмотреть сообщение
Штука, которую ты замыслил, называется DI (внедрение зависимостей).
В данном конкретном случае, два объекта из трех будут доработаны напильником после конструирования.
Подумай ещё раз, нужны ли тебе циклические ссылки. Обычно они не нужны. Здесь, например, ссылки между артистом и песней выглядят бредово. Песня сама по себе, артист сам по себе. Фильм на них ссылается весьма органично - у него конкретная песня и конкретный артист (хотя артистов может быть несколько на главной роли, но это ладно). В то же время песня может быть в более чем одном фильме, и артист со своей главной ролью тоже - соответственно у них логичнее сделать не ссылку на фильм, а массив фильмов.

Но это так, лирика. А в целом, DI через конструктор - никаких циклических ссылок.
Спасибо за инфо...
Я же говорю, на логику конкретных(указанных мной) классов не особо нужно обращать внимание , в реале совсем другие классы, просто всё гораздо сложнее и объяснение идеи делу не поможет) Мне смысл надо, что б был такой, какой я описал... Спасибо еще раз инфу, сейчас буду разбираться что за DI и с чем его употреблять)
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2021, 19:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

worldsering, если ты хочешь хранить в неких ключах объекта другие объекты - тебе придется делать их клоны.
Иначе ты будешь хранить ссылки на созданный экземпляр объекта...

Если в ключе нужно хранить несколько объектов - это уже будет массив таких объектов.
Будь то список актеров фильма... Или список фильмов у актера...
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2021, 19:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от worldsering
Заранее скажу, что делать вот так не надо
...
Вот как вижу это я , но не знаю пока как реализовать
Да как ни пиши - суть будет одна. В какой-то ключ будет записываться клон созданного объекта. Или тот ключ будет массивом и клон объекта будет добавляться в тот массив...
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2021, 19:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от worldsering
и получается, что в Titanik и Dikaprio недостающие свойства сгенерируются автоматом
Какие именно свойства?
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2021, 22:18
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Сообщение от ksa Посмотреть сообщение
Какие именно свойства?
Ну мы допустим у Артиста указали что фильм - Titanik, а как сделать так, что бы после этого действия, наш Titanik "понял" что появился у Дикаприо и что в графу с артистом нужно, что бы пророс автоматически Дикаприо ...
ну смысл такой, мол зачем всем классам всё прописовать в руке, это куча куча куча когда, когда я хочу, что бы свойства сами прорастали, я на картинке описал
https://files.fm/thumb_show.php?i=tt7ryjtd7

Последний раз редактировалось worldsering, 06.04.2021 в 22:32.
Ответить с цитированием
  #8 (permalink)  
Старый 07.04.2021, 22:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от worldsering
я хочу, что бы свойства сами прорастали
Тут одного хотения мало...

В СУБД для связи "фильмов" и "артистов" делают еще одну таблицу, куда прописывают ссылки на артиста и фильм.
Потом через ту таблицу всю информацию можно получить в обе стороны.

А ты задумал нечто не сусветное...
Ответить с цитированием
  #9 (permalink)  
Старый 07.04.2021, 23:04
Интересующийся
Отправить личное сообщение для worldsering Посмотреть профиль Найти все сообщения от worldsering
 
Регистрация: 01.04.2021
Сообщений: 11

Сообщение от ksa Посмотреть сообщение
Тут одного хотения мало...

В СУБД для связи "фильмов" и "артистов" делают еще одну таблицу, куда прописывают ссылки на артиста и фильм.
Потом через ту таблицу всю информацию можно получить в обе стороны.

А ты задумал нечто не сусветное...
Какую еще таблицу, не совсем понял ?)
Ну тогда как сделать это лучше всего ? Можно поподробнее ? Я хочу что бы мои классы содержали связные с ними классы
Ответить с цитированием
  #10 (permalink)  
Старый 07.04.2021, 23:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от worldsering
Какую еще таблицу, не совсем понял ?)
Тут уже нужно книжку тебе почитать про структурирование данных...

Сообщение от worldsering
Я хочу что бы мои классы содержали связные с ними классы
Х/з для чего тебе такое нужно...
Но для таких "связей" вполне достаточно прописать ссылку на класс1 в любой ключ класса2 и наоборот.

Тогда через эти ключи ты получишь "кругооборот" классов относительно друг друга...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить переменные между собой Ermite Общие вопросы Javascript 17 02.05.2016 14:28
Связанные между собой данные при передачи по GET zhurchik Общие вопросы Javascript 8 19.03.2015 16:08
Функция взаимодействия двух независимых между собой величин dmitry111 Общие вопросы Javascript 5 20.08.2012 10:51
скрипты конфликтуют между собой coshak AJAX и COMET 0 21.04.2011 11:01
Связь полей между собой vinnie Javascript под браузер 13 20.02.2010 17:19