Какой Perl УСПОКОИТЕЛЬНАЯ платформа Вы рекомендуете? [закрытый]

Я - огромный поклонник организованных источников, таким образом, я всегда создаю следующую структуру каталогов:

/src - for your packages & classes
/test - for unit tests
/docs - for documentation, generated and manually edited
/lib - 3rd party libraries
/etc - unrelated stuff
/bin (or /classes) - compiled classes, output of your compile
/dist - for distribution packages, hopefully auto generated by a build system

В/src я использую шаблоны Java по умолчанию: имена Пакета, запускающиеся с Вашего домена (org.yourdomain.yourprojectname) и имен классов, отражающих аспект ООП, который Вы создаете с классом (см. других комментаторов). Общие имена пакета как util, представление модели , , события полезны, также.

я склонен помещать константы для определенной темы в собственном классе, как SessionConstants или ServiceConstants в том же пакете доменных классов.

19
задан brian d foy 5 November 2009 в 07:28
поделиться

8 ответов

Думаю, вы обнаружите, что Squatting отвечает всем этим требованиям!

Я написал довольно много небольших приложений RESTful с его использованием. Он идеально подходит для этого, и с ним было приятно работать.

Вот еще несколько ссылок:

Вот простой "привет, мир!" пример:

use strict;
use warnings;

{
  package Simple;
  use base 'Squatting';
}

{ 
  package Simple::Controllers;
  use Squatting ':controllers';

  our @C = (
    C(
      Index => [ '/' ],
      get   => sub { 
        my ($self) = @_;
        my $v = $self->v;
        $v->{hello} = 'Hello World!';
        $self->render( 'hello' );
      },
    ),
  );
}

{
  package Simple::Views;
  use Squatting ':views';
  use HTML::AsSubs;

  our @V = (
    V(  'html',

      layout => sub { 
        my ($self, $v, @yield) = @_;
        html(
          head( title('Simple web app') ),
          body( @yield ),
        )->as_HTML;
      },

      hello => sub {
        my ($self, $v) = @_;
        p( $v->{hello} );
      },
    ),
  );
}

Сохраните выше как Simple.pm в соответствующем месте и убедитесь, что в вашей конфигурации Apache есть следующее:

<Perl>
  use Simple 'On::MP20';
  Simple->init
</Perl>

<Location />
  SetHandler perl-script
  PerlHandler Simple->mp20
</Location>

И вперед!

Хотя здесь я бы также вскользь упомянул пару других фреймворков, которые должны соответствовать всем требованиям:

Я говорю «мимоходом», потому что я не использовал любой из них, и я не уверен, работает ли он (из коробки) с mod_perl2. Тем не менее, с PSGI / Plack прямо за углом, это не будет проблемой слишком долго; -)

/ I3az /

7
ответ дан 30 November 2019 в 02:24
поделиться

Я использовал Dancer ( github ) для некоторых моих небольших проектов. Это очень элегантно, и с ним очень легко справляться с задачами. Он был вдохновлен фреймворком Ruby Sinatra .

Это так же просто, как:

#!/usr/bin/env perl
use Dancer;

get '/' => sub {
    'Hello world!'
};

dance;
17
ответ дан 30 November 2019 в 02:24
поделиться

Dancer довольно хорошо документирован и заслуживает доверия, если вы посмотрите на набор тестов: ~ 500 тестов, которые покрывают более 80% исходного дерева.

Он совместим с PSGI / Plack и имеет мало зависимостей. Версия 1.0 должна быть выпущена очень скоро (возможно, в эти выходные).

См. веб-сайт танцора , чтобы следить за обновлениями.

10
ответ дан 30 November 2019 в 02:24
поделиться

Я хочу, чтобы это был детерминированный шаг (не «когда-нибудь, когда запустится сборщик мусора»).

Извините, но тогда Java - неподходящий язык для вас. Инфраструктура DI не знает, когда все ссылки на объект исчезли. Только сборщик мусора знает об этом.

Если у вас есть «закрываемый» ресурс, используйте шаблон try / finally, чтобы закрыть его (см. Ниже).

Closable c = // ...
try {
   c.use();
} finally {
   c.close();
}

Теперь вернемся немного назад. Guice может знать, когда область действия начинается и заканчивается. По завершении ваша настраиваемая область может выполнить этап очистки. Эта область может даже возвращать прокси, поэтому объекты будут недействительными, если вы попытаетесь получить к ним доступ за пределами разрешенной области.

(О, и +1 к ColinD - поставщики инъекций. :)

РЕДАКТИРОВАТЬ :

8
ответ дан 30 November 2019 в 02:24
поделиться

Моя любимая среда веб-приложений Perl - это CGI :: Application . Он очень легкий (единственный базовый класс, от которого вы можете унаследовать) и выполняет минимум, необходимый для обработки повторяющихся задач программирования веб-приложений и в остальном не мешает вам. Вы можете использовать его в формальном дизайне MVC или делать что-то еще ad hoc , если хотите.

Он имеет простую архитектуру плагинов , что позволяет легко добавлять поддержку за Набор инструментов для шаблонов ( HTML :: Template поддерживается из коробки) сеансы , аутентификация , JSON , потоковое , и т. д.

Наконец, для создания дружественных к REST URL-адресов существует отличный CGI :: Application :: Dispatch , который дает вам мощный основанный на правилах механизм для диспетчеризации на основе URL-адресов.

Кроме того, несмотря на свое название, он без проблем работает с mod_perl 1 и 2.

7
ответ дан 30 November 2019 в 02:24
поделиться

Catalyst - это среда MVC, которую вы можете использовать для создания сервисов Restfull

  • Она работает под apache2 / mod_perl2
  • Она проста и элегантна, но ИМХО не так много, как большинство из "новых" фреймворков MVC
  • Да .. это легкий.
  • Не думаю, что это действительно гибко .. :( ..

EDIT: - «Новые» фреймворки, которые я сказал, - это те, которые имеют хорошие тестовые фреймворки для использования (например, rails / spring / Seam, с катализатором нелегко проводить тесты, кроме обычных модульных тестов), а также множество разработчиков, работающих над созданием приложения к ним (сообщество вокруг этих фреймворков гораздо более активно). Вот почему я не думаю, что Catalyst тоже действительно гибкий.

4
ответ дан 30 November 2019 в 02:24
поделиться

I наконец-то свернул мою собственную выделенную среду RESTful API на чистом mod_perl2: http://code.google.com/p/apache2rest/

Ничего не встроено, кроме самого необходимого. Остальное расширяемо (или будет). Я просмотрел все ваши предложения, и все они, кажется, касаются слишком многих вещей (управление DBI, ORM, механизм шаблонов, встроенный сервер ...).

Вот почему я написал это. Надеюсь, вы найдете это полезным.

2
ответ дан 30 November 2019 в 02:24
поделиться

Извините, что ответил немного поздно, но я описал структуру REST в тексте ссылки , которая мне очень понравилась. Это упрощает добавление новых ресурсов; Мне едва ли нужно писать больше, чем бизнес-логику для конкретных ресурсов; каркас позаботится обо всем остальном.

0
ответ дан 30 November 2019 в 02:24
поделиться
Другие вопросы по тегам:

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