Ответ 1
Это частая путаница для новых пользователей 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, чтобы облегчить их понимание конечными пользователями.
Надеюсь, что это поможет.