Когда использовать Приморские компоненты, и когда использовать простые объекты рендеринга?

readlines перебирает весь файл. Затем вы перебираете результат из readlines. Я думаю, что следующее редактирование сэкономит вам одну итерацию большого файла.

write = True
first_time = True

with open(file_to_copy) as f, open(output, "w") as newf:
    for line in f:
      if first_time == True:
          if stop in line:
              first_time = False
              write = False
              for i in range(300):
                  newf.write(
                  '\n  -------------------- MIDDLE OF THE FILE -------------------')
              print('\n\n')
      if restart in line: write = True
      if write: newf.write(line)
print('Done.')
17
задан new_squeaker 8 May 2009 в 04:39
поделиться

1 ответ

Это частая путаница для новых пользователей Приморского региона. Мы изо всех сил старались прояснить это в Seaside 2.9, который в настоящее время находится в Alpha, но я постараюсь сосредоточиться на 2.8 здесь, так как это звучит так, как будто вы используете.

Прежде всего, вы правы, что вы не нужно использовать компонент для доступа к сеансу. Seaside 2.9 перемещает #session в новый класс WAObject , который делает его доступным почти для всех объектов Seaside (включая Компоненты), но вы определенно можете обратиться к WACurrentSession самостоятельно на данный момент в 2.8.

Компоненты предоставляют примерно следующую функциональность в 2.8:

  1. #renderContentOn: ), чтобы разрешить инициализацию на основе запроса, который привел к созданию сеанса
  2. Средство ( #children ), чтобы убедиться, что все компоненты, расположенные ниже, также будут вызывать вышеупомянутые ловушки [] 1212] Возможность добавления украшений
  3. Возможность показа / ответа / вызова (использует украшения)
  4. Некоторые удобные методы ( #inform: , #isolate: и т. Д.) )

Если вам не нужно ничего из вышеперечисленного, вам не нужен компонент. Если вам нужно что-то из вышеперечисленного, вам в значительной степени нужен Компонент, если вы не хотите реализовать эквивалентную функциональность в своем собственном классе.

Вероятно, простейшая метрика: если вы намереваетесь хранить объект между HTTP-запросами, он должен быть Компонентом; если вы намереваетесь выбрасывать объект и создавать его на каждом проходе рендеринга, это, вероятно, не Это должно быть. Если вы представляете приложение, которое отображало страницы блога, у вас, вероятно, были бы Компоненты для меню, рулона блога, тела блога, каждого комментария и так далее. Возможно, вы захотите выделить чтение разметки блога и генерировать его HTML, чтобы вы могли поддерживать разные разметки или разные средства визуализации и чтобы компоненты комментариев могли поддерживать одну и ту же разметку. Это можно сделать с помощью некомпонентного класса, который реализует #renderOn: и может создаваться и использоваться другими компонентами по мере необходимости.

Приморский участок 2.9 в настоящее время разделяет вышеуказанную функциональность, делая WAPresenter бетон и введение WAPainter в качестве его суперкласса. 1-3, описанные выше, реализованы в WAPainter и 4-7 в WAPresenter , так что вы можете выбрать, что подклассировать в зависимости от ваших потребностей. Он также удаляет множество методов из WAPresenter и WAComponent, чтобы облегчить их понимание конечными пользователями.

Надеюсь, это поможет.

16
ответ дан 30 November 2019 в 14:12
поделиться