Я - огромный поклонник организованных источников, таким образом, я всегда создаю следующую структуру каталогов:
/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 в том же пакете доменных классов.
Думаю, вы обнаружите, что 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 /
Я использовал Dancer ( github ) для некоторых моих небольших проектов. Это очень элегантно, и с ним очень легко справляться с задачами. Он был вдохновлен фреймворком Ruby Sinatra .
Это так же просто, как:
#!/usr/bin/env perl
use Dancer;
get '/' => sub {
'Hello world!'
};
dance;
Dancer довольно хорошо документирован и заслуживает доверия, если вы посмотрите на набор тестов: ~ 500 тестов, которые покрывают более 80% исходного дерева.
Он совместим с PSGI / Plack и имеет мало зависимостей. Версия 1.0 должна быть выпущена очень скоро (возможно, в эти выходные).
См. веб-сайт танцора , чтобы следить за обновлениями.
Я хочу, чтобы это был детерминированный шаг (не «когда-нибудь, когда запустится сборщик мусора»).
Извините, но тогда Java - неподходящий язык для вас. Инфраструктура DI не знает, когда все ссылки на объект исчезли. Только сборщик мусора знает об этом.
Если у вас есть «закрываемый» ресурс, используйте шаблон try / finally, чтобы закрыть его (см. Ниже).
Closable c = // ...
try {
c.use();
} finally {
c.close();
}
Теперь вернемся немного назад. Guice может знать, когда область действия начинается и заканчивается. По завершении ваша настраиваемая область может выполнить этап очистки. Эта область может даже возвращать прокси, поэтому объекты будут недействительными, если вы попытаетесь получить к ним доступ за пределами разрешенной области.
(О, и +1 к ColinD - поставщики инъекций. :)
РЕДАКТИРОВАТЬ :
Моя любимая среда веб-приложений Perl - это CGI :: Application . Он очень легкий (единственный базовый класс, от которого вы можете унаследовать) и выполняет минимум, необходимый для обработки повторяющихся задач программирования веб-приложений и в остальном не мешает вам. Вы можете использовать его в формальном дизайне MVC или делать что-то еще ad hoc , если хотите.
Он имеет простую архитектуру плагинов , что позволяет легко добавлять поддержку за Набор инструментов для шаблонов ( HTML :: Template поддерживается из коробки) сеансы , аутентификация , JSON , потоковое , и т. д.
Наконец, для создания дружественных к REST URL-адресов существует отличный CGI :: Application :: Dispatch , который дает вам мощный основанный на правилах механизм для диспетчеризации на основе URL-адресов.
Кроме того, несмотря на свое название, он без проблем работает с mod_perl 1 и 2.
Catalyst - это среда MVC, которую вы можете использовать для создания сервисов Restfull
EDIT: - «Новые» фреймворки, которые я сказал, - это те, которые имеют хорошие тестовые фреймворки для использования (например, rails / spring / Seam, с катализатором нелегко проводить тесты, кроме обычных модульных тестов), а также множество разработчиков, работающих над созданием приложения к ним (сообщество вокруг этих фреймворков гораздо более активно). Вот почему я не думаю, что Catalyst тоже действительно гибкий.
I наконец-то свернул мою собственную выделенную среду RESTful API на чистом mod_perl2: http://code.google.com/p/apache2rest/
Ничего не встроено, кроме самого необходимого. Остальное расширяемо (или будет). Я просмотрел все ваши предложения, и все они, кажется, касаются слишком многих вещей (управление DBI, ORM, механизм шаблонов, встроенный сервер ...).
Вот почему я написал это. Надеюсь, вы найдете это полезным.
Извините, что ответил немного поздно, но я описал структуру REST в тексте ссылки , которая мне очень понравилась. Это упрощает добавление новых ресурсов; Мне едва ли нужно писать больше, чем бизнес-логику для конкретных ресурсов; каркас позаботится обо всем остальном.