Это частая путаница для новых пользователей Seaside. Мы изо всех сил старались сделать это более понятным в Seaside 2.9, который в настоящее время находится в Alpha, но я постараюсь сосредоточиться на 2.8 здесь, так как похоже, что это то, что вы используете.
Прежде всего, вы правы, что вам не нужно использовать Компонент для доступа к Сессии. Seaside 2.9 перемещается #session
в новый класс WAObject
, который делает его доступным почти для всех объектов Seaside (включая Компоненты), но вы определенно можете ссылаться на WACurrentSession
на данный момент в 2.8.
Компоненты обеспечивают примерно следующую функциональность в 2.8:
#renderContentOn:
вызывается с экземпляром любого класса рендерера, который вы указываете в #rendererClass
(вместо того, чтобы использовать тот рендерер, который используется, когда ваш объект просят визуализировать себя)
- Хук (
#updateUrl:
), позволяющий обновить URL-адрес, используемый средством визуализации для создания ссылок
- Хуки (
#updateRoot:
, #style
, #script
) для обновления раздела HEAD HTML-документа
- Возможность быть корнем приложения
- Крючки (
#updateStates:
, #states
) для облегчения возврата состояния
- Хук (
#initialRequest:
), чтобы разрешить инициализацию на основе запроса, вызвавшего создание сеанса
- Средство (
#children
), позволяющее удостовериться, что все компоненты, расположенные ниже вас, также будут вызывать вышеуказанные крючки
- Возможность добавления украшений
- Возможность показать / ответить / позвонить (использует украшения)
- Некоторые удобные методы (
#inform:
, #isolate:
и т. Д.)
Если вам не нужно ничего из вышеперечисленного, вам не нужен компонент. Если вам нужно что-то из вышеперечисленного, вам в значительной степени нужен Компонент, если вы не хотите реализовать эквивалентную функциональность в своем собственном классе.
Возможно, простейшая метрика: если вы намерены хранить объект между HTTP-запросами, это должен быть Компонент; если вы намереваетесь выбрасывать объект и создавать его при каждом проходе рендеринга, это, вероятно, не обязательно. Если вы представляете приложение, которое отображало страницы блога, у вас, вероятно, были бы Компоненты для меню, рулона блога, тела блога, каждого комментария и так далее. Возможно, вы захотите выделить чтение разметки блога и генерацию его HTML, чтобы вы могли поддерживать разные разметки или разные средства визуализации и чтобы компоненты комментариев могли поддерживать одну и ту же разметку. Это можно сделать с помощью некомпонентного класса, который реализует #renderOn:
и может быть создан и использован другими компонентами по мере необходимости.
Seaside 2.9 в настоящее время разделяет вышеуказанную функциональность, делая бетон WAPresenter
и вводя WAPainter
в качестве суперкласса. 1-3 выше реализованы на WAPainter
и 4-7 на WAPresenter
, поэтому у вас есть выбор того, что подкласс в зависимости от ваших потребностей. Он также удаляет множество методов из WAPresenter и WAComponent, чтобы облегчить их понимание конечными пользователями.
Надеюсь, это поможет.