Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Помогите продумать архитектуру приложения (https://javascript.ru/forum/angular/64406-pomogite-produmat-arkhitekturu-prilozheniya.html)

ArtificialLife 09.08.2016 13:31

Помогите продумать архитектуру приложения
 
Всем привет. Задумал я изучение Angular.js. Прошел пару курсов, уже некоторое время поигрался с приложением "phoneCat" из документации. Задумал простенькое приложение, которое будет собирать новости из разных источников (на выбор) и выводить на страницу.

Сейчас я пришел к следующему:
  1. Создал layout
  2. Создал компонент "menu", который выводит меню с настройками фильтрации новостей
  3. Создал компонент который выводит новость на предпросмотр

Выглядит это примерно так:


Т.е. в лейоуте отображается меню, в меню отображается превью.

Проблема в следующем - я не знаю как правильно организовать подгрузку новостей из различных источников (скажем, из двух десятков сайтов с новостями).

Я так понимаю, что для каждого источника новости нужно создать свой сервис, который будет парсить сайт/дергать API и т.д. Это не проблема. А вот как потом работать с этими десятками сервисов, да так, чтобы это было удобно - я что-то не могу придумать.

Вопросы:
  1. Как работать с большим кол-вом сервисов?
  2. Где "правильнее" юзать эти сервисы? В контроллере компонента news-preview? В контроллере menu? Или для работы с ними лучше создать еще один сервис?
  3. Как блокировать/активировать сервисы? К примеру, если я хочу просматривтаь новости только из одного источника.

Спасибо.

destus 10.08.2016 18:25

ArtificialLife,
Цитата:

Как работать с большим кол-вом сервисов?
а универсальный парсер для всех API нельзя написать? Ну то есть есть структура, которую понимает приложение, нужно выдернуть новость с API стороннего сайта и привести к этой структуре.
Цитата:

Где "правильнее" юзать эти сервисы? В контроллере компонента news-preview? В контроллере menu?
Ребята из Facebook считают, что компоненты должны быть подобны чистым функциям. А UI в этом случае будет лишь композицией этих функций.
UI = сomponents(state)

То есть в компоненте верхнего будет всё состояние твоего приложения, он будет через биндинги прокидывать часть состояния в дочерние компоненты. Вместо того что бы менять состояние прямо в компоненте, имеет смысл просить это сделать сервисы, складывая всю ответственность на них. Они в свою очередь должны будут обновить состояние на верхнем уровне, что в итоге обновит состояние компонента, который и запустил всю эту цепочку. ©
Цитата:

Как блокировать/активировать сервисы? К примеру, если я хочу просматривтаь новости только из одного источника.
То есть у пользователя есть возможность выбирать источник информации? И это в каком-то хранилище нужно запомнить, при инициализации приложения подгружать этот выбор и настраивать соответствующим образом фильтры?


Часовой пояс GMT +3, время: 12:14.