ng.app.rss
2008-01-12 23:38RSS-фидер состоит из трех компонент: очереди объектов (сейчас реализована в рамках продукта objectqueue), описания специальных параметров фидера (нужно сделать продукт ng.app.rss), сохраняющего данные, и собственно самой страницы. Страница может привязываться или не привязываться к какому-то интерфейсу, но так или иначе, она адаптирует контекст к двум интерфейсам:
- Интерфейс очереди;
- Интерфейс параметров фидера;
После чего по параметрам фидера генерируется заголовок, а по содержимому очереди - записи RSS. Очередь, в настоящее время, содержит объекты, которые надо приводить к потребностям RSS специальными адаптерами.
Ну вот в принципе - готовое задание.
Для первого релиза мы выбираем формат Atom.
Краткое описание пакета ng.app.rss
Пакет разработан для раздачи RSS-лент и является объединением трех компонент:
- ObjectQueue
- Компонента, выполняющая поддержку очереди изменившихся объектов. Такая очередь характеризуется принципом отбора объектов, их очередностью и рядом других параметров. Содержимое очереди это точно то, что войдет в RSS-ленту.
- RSS-параметры
- Компонента, предоставляющая интерфейс, содержащий настроечные параметры RSS. Эту компоненту надо разработать в соответствии с принципами, изложенными ниже.
- RSS-вид
Адаптер вида, получающий текущий контекст и адаптирующий его к двум интерфейсам: IObjectQueue (соответствует очереди) и IRSS (соответствует парамерам RSS).
Адаптер вида может привязываться, а может и не привязыватся к конкретному контексту - это не должно отражаться на его работе и быть только элементом удобства.
В качестве первоначального выбора, используется стандарт http://ru.wikipedia.org/wiki/Atom - он более прост и более полезен, так используется в группах, на которые мы собираеся звязаться сразу после выхода проекта в свет.
Идея реализации
Главная тонкость реализации - нигде и никак не определяется в каком месте и каким образом располагаются ObjectQueue и RSS. Они получаются при помощи адаптера "откуда-то", хотя на самом деле могут быть расположены (см. Адаптация как способ ассоциации компонент.txt) в самых разных местах. Пока что мы не будем заниматься общем решением этой проблемы, но когда основная часть будет написана и RSS будет раздаватся, попробуем написать два специальных адаптера, которые поочередно пытаются адаптировать текущий объект напрямую, потом всех его родителей, потом дергать утилиту. Ну или поиграем в другие способы тонкой настройки.
Интерфейсы
ObjectQueue
Все интерфейсы и реализация описаны в objectqueue.txt (продукт может переехать скоро). Адаптер, выполняющий поиск продукта уже есть.
Утилита предоставляет список объетктов, но объекты могут быть включены в ленту, только если они приводимы к интерфейсу IRSSItem.
- IRSSItem
- Записи RSS-ленты заполняются атрибутами этого интрефейса. Если в очереди есть объект, неприводимый к этому интерфейсу, запись о нем не включается в RSS-ленту. Список полей интерфейса нужно позаимствовать из описания Atom: http://ru.wikipedia.org/wiki/Atom, а адаптеры хорошо пишутся с помощью продукта ng.zcmljunction.
RSS-параметры
- IRSS
- Общие параметры RSS-ленты, список надо позаимствовать отсюда: http://ru.wikipedia.org/wiki/Atom . Адаптер контекста к IRSS пишется исходя из предположения, что IRSS - утилита.
Компоненты
Два компонента уже описаны: ObjectQueue и RSS-параметры, упомянем еще два:
Адаптер вида ng.app.rss.rssview
RSS-лента изготаввливается на основ ZPT, а данные получаются при помощи mix-in'а, как описано выше.
Адаптер к интерфейсу IRSSItem
Делается на основе ng.zcmljunction, в качестве теста можно попробовать взять куски продукта note или установить наш сайт. Пора уже выходить в реальный мир :).



