Как я разрабатываю приложения web 2.0 с CGI.pm?

Мы должны использовать методы расширения , если мы совершенно уверены, что эти методы одинаковы для реализации интерфейса all (включая потенциальную):

  public interface IFoo {
    void Bar(int a); 
  } 

  public static class FooExtensions {
    public static void Bar(this IFoo foo, int a, int b) {...}
    public static void Bar(this IFoo foo, int a, int b, int c) {...}
  }

Мы можем реализовать различные Bar(int a) методы

  public MyFoo : IFoo {
    void Bar(int a) { /* MyFoo algorithm here */}
  }

  public MyOtherFoo : IFoo {
    void Bar(int a) { /* some other - MyOtherFoo - algorithm here */}
  }

Но Bar(int a, b), а также Bar(int a, b, c) все еще остаются прежними:

[112 ]

Если, скажем, Bar(int a, int b) может варьироваться от реализации к реализации, мы должны добавить его в интерфейс:

  public interface IFoo {
    void Bar(int a); 
    void Bar(int a, int b); 
  } 

  ...

  public MyFoo : IFoo {
    void Bar(int a)        { /* MyFoo algorithm here */}
    void Bar(int a, int b) { /* MyFoo algorithm here */} 
  }

  public MyOtherFoo : IFoo {
    void Bar(int a)        { /* some other - MyOtherFoo - algorithm here */}
    void Bar(int a, int b) { /* some other - MyOtherFoo - algorithm here */} 
  }

Если почти все реализации интерфейса имеют тот же алгоритм, что будет скучно вводить код котельной плиты. Однако в C # 8.0 у нас будет хороший компромисс - реализация метода по умолчанию , например

  public interface IFoo {
    void Bar(int a); 
    void Bar(int a, int b) {
      /* Default code here */
    } 
  } 

  // uses default code for Bar(int a, int b)
  public MyFoo : IFoo {
    void Bar(int a)        { /* MyFoo algorithm here */}
  }

  // uses its own code for Bar(int a, int b)
  public MyOtherFoo : IFoo {
    void Bar(int a)        { /* some other - MyOtherFoo - algorithm here */}
    void Bar(int a, int b) { /* some other - MyOtherFoo - algorithm here */} 
  }
6
задан 14 November 2008 в 15:07
поделиться

7 ответов

Лично, я не поклонник Катализатора (слишком тяжелый для моего вкуса) или Mason (смешивание кода, и HTML является плохим амулетом), но я вполне успеваю использовать CGI.pm для входа [1], HTML:: Шаблон для вывода и CGI:: Ajax для обеспечения функциональности Ajax, где требуется.

При рассмотрении платформ можно также хотеть рассмотреть CGI:: Приложение, которое является широко используемым и альтернативой более легкого веса Катализатору/Масону.

[1] Я не могу вспомнить в прошлый раз, когда я назвал что-либо кроме $q-> параметрический усилитель или $q-> cookie от CGI.pm. Существует все еще много учебных руководств, там говоря для использования его функций поколения HTML, но это все еще смешивает код и HTML способом, это настолько же плохо как использует здесь документы, если не хуже.

11
ответ дан 8 December 2019 в 04:10
поделиться

Рассмотрите использование чего-то более современного, например, Катализатор. Это сделает Вашу жизнь намного легче, и Вы не должны будете изобретать велосипед. Я понимаю, что это - просто маленький проект, но на основе моего опыта много маленьких проектов вовремя становятся большими :)

4
ответ дан 8 December 2019 в 04:10
поделиться

Я соглашаюсь с ответом Adam, Вы, вероятно, хотите использовать Катализатор. Однако если Вы действительно не хотите, нет ничего препятствующего тому, чтобы Вы использовали только CGI.pm. Вещь, Катализатор является набором пакетов, которые делают вещи, Вы хотите сделать Web 2.0 легким. Это комбинирует различные механизмы шаблонной обработки, такие как Шаблонный Инструментарий или Mason с различными интерфейсами ORM как DBIx:: Класс и Класс:: DBI.

Конечно, Вы не должны использовать эти вещи записать приложения Web 2.0, это - просто хорошая идея. Часть Вашего вопроса задается вопросом, требуют ли JavaScript и платформы CSS как jQuery или прототип чего-нибудь от серверного кода. Они не делают, можно использовать их с любым видом серверного кода, который Вы хотите.

1
ответ дан 8 December 2019 в 04:10
поделиться

Да, можно записать идеальные web2.0 веб-приложения, не используя платформы на стороне сервера ни в каком Perl языка, Python, Java, и т.д. и не используя библиотек/платформы JavaScript по стороне клиента. Определением web 2.0 является своего рода свободное определение, и я предполагаю web2.0, Вы имеете в виду Ajax или частичное обновление страницы, затем все, в чем Вы действительно нуждались бы, должен сфокусироваться на следующем:

  1. Знайте об объекте XmlHttpRequest.
  2. Знайте, как возвратить объект JSON от сервера до клиента.
  3. Знайте, как безопасно оценивать/анализировать объект JSON использование JavaScript и знать для управления DOM. Кроме того, по крайней мере, знайте о innerHTML. InnerHTML полезен occasioanally.
  4. Знайте CSS.

Однако намного легче использовать некоторую платформу на стороне сервера, но не потому что это требуется web2.0, и намного легче использовать некоторый JavaScript на клиенте как jQuery, mootools, YUI. И Вы можете смешивание и подгонка зависеть от Ваших потребностей и Ваших вкусов. Большая часть JavaScript обеспечивает обертку вокруг XmlHttpRequest так, чтобы это работало через все браузеры. "Явный" XmlHttpRequest никакой записи больше, если Вы не хотите показать некоторые образцы.

3
ответ дан 8 December 2019 в 04:10
поделиться

Приложения "web 2.0", что я работал с обычно использованием клиентский JavaScript для запроса данных JSON из сервера, затем используют те данные для обновления страницы, оперативной через DOM.

Модуль JSON полезен для возврата структурированных данных к браузеру.

До включая JavaScript, HTML, или безотносительно в здесь документе - который никогда не был хорошей идеей и все еще не является. Вместо этого используйте одно из изобилия шаблонных модулей, которые будут найдены на CPAN. Для CGI я избежал бы "тяжелых" модулей как Mason или Шаблонный Инструментарий, и использовал бы более легкий модуль для более быстрого запуска, такого как текст:: Шаблон или Шаблон:: Простой.

3
ответ дан 8 December 2019 в 04:10
поделиться

Совершенно возможно записать приложения "Web 2.0" с помощью CGI.pm, но необходимо будет сделать работу сами. Из того, что я видел, фокус в сообществе разработчиков Perl был на разработке платформ преемника к CGI, не при записи модулей помощника, чтобы позволить приложениям прежней версии загружаться в современные парадигмы. Таким образом, Вы несколько самостоятельно.

Относительно того, начать ли, что Вы действительно пытаетесь выполнить? Общее определение "Web 2.0" несколько отличается.

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

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

2
ответ дан 8 December 2019 в 04:10
поделиться

Если переход от CGI.pm до Катализатора кажется слишком пугающим затем, возможно, что-то как Сидение на корточках могло бы быть более соответствующим?

Сидение на корточках является веб-микроплатформой, и я нашел это идеальным для быстрой разработки прототипа и для замены/обновления моих старых сценариев CGI.

Я недавно создал маленькое приложение "web 2.0" с Сидящим на корточках, используя jQuery без проблем вообще. В распределении CPAN существует каталог в качестве примера, который содержит некоторые программы с помощью jQuery и Ajax включая очень интересное [КОМЕТА] (http://en.wikipedia.org/wiki/Comet_ (программирование)) пример, который использует Непрерывность (который Сидящие на корточках "приседания" на по умолчанию).

NB. При необходимости затем можно позже "сидеть на корточках" приложение на Катализатор с Сидением на корточках:: На:: Катализатор

1
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: