Можно создавать древовидные / рекурсивные объекты в отдельных файлах и избегать предупреждения Circular dependency detected
, используя Angular CLI , если я вызываю методы из рекурсивных классов?
(проверено на угловом 7) Я понимаю, что это проблема при внедрении зависимостей ( article ), но как насчет объектов, используемых в качестве конструктора для данных из внешнего API или для внутренние цели? И если это не очень хорошая идея, как вы ее решаете? (Я полагаю, что ответ на этот «подзапрос» - это изменение модели, тогда как мне изменить мою модель?) Я ищу решение, но ближайший вопрос не помог мне применить тот же подход к моей ситуации .
У меня есть Emails
и Attachments
(электронные письма с вложениями - и весь Email
с вложениями также может быть вложением, Attachment
- это отдельный объект с атрибутами, а содержимое может быть File
или Email
, но здесь, для простоты, предположим, что вложение всегда одно Email
или ноль).
Каждый класс имеет статический метод для создания экземпляра из объекта JSON (я получаю JSON из API, затем я создам экземпляр объекта, представляющего значения API, вызвав статический метод fromJson
для верхнего объекта):
файл: app / model / email.ts (часть кода)
import { Attachment } from './attachment';
export class Email {
// some attributes
public attachment?: Attachment;
public static fromJson(js: JSON): Email {
const e = new Email();
// fill some attributes here
if (js['attachment']) { e.attachment = Attachment.fromJson(js['attachment']); }
return e;
}
}
файл: app / model / attachment.ts (часть кода)
import { Email } from './email';
export class Attachment {
// some attributes
public content: Email;
public static fromJson(js: JSON): Attachment {
const a = new Attachment();
// fill some attributes here
if (js['email']) { a.content = Email.fromJson(js['email']); }
return a;
}
}
Первоначальный вызов: this.email = Email.fromJson(apiResponseForEmail);
Эта ситуация приводит к Обнаружена круговая зависимость Предупреждение после ng build | serve
. Если это не хороший пример для вас, вы можете представить класс Recipe
для еды, который содержит Ingredients
с такими атрибутами, как количество и температура, где результат одного Recipe
является ингредиентом для другого рецепта.
Если эти классы находятся в одном файле, предупреждение не выдается. Однако размещение всего в одном большом файле для меня не лучшее решение (если есть какой-либо другой).
Вот демонстрация Stackblitz с циклической зависимостью (но без предупреждений в консоли, stackblitz, очевидно, удаляет предупреждения, вам нужно скачать этот код и запустить с localhost, чтобы увидеть предупреждение).
Меня интересует, можно ли размещать такие классы (которые вызываются в коде рекурсивно статическим методом, как в примере) в отдельные файлы (файлы, названные классами) и избегать сообщения Обнаружена циклическая зависимость