Страница 1 из 1
MVC && ORM на perl
Добавлено: 2008-10-19 0:51:27
ProFTP
сабж
MVC (model view controller)
http://search.cpan.org/~mramberg/Cataly ... atalyst.pm
ORM (object-relational mapper) объектный реляционный картопостроитель
http://search.cpan.org/~akimov/ORM-0.85/lib/ORM.pod
не могу понять в каких случаях нужно испольовать ORM, и где реально оно надо, и зачем он, хотя там написано, но все равно не понятно это просто так чтоли, чтобы были объекты? я сам ООП редко когда использую свое... еще нашел Catalyst, он помощнее чем другие, хочу попробовать, это штука строит структуру сайта...
Re: MVC && ORM
Добавлено: 2008-11-21 9:36:09
ProFTP
подскажите, реально ли спасате такая асбтрацкия для БД при больших запросов?
http://search.cpan.org/~ash/DBIx-Class-0.08010/
http://search.cpan.org/~ash/DBIx-Class- ... oining.pod
то есть если нужно вывести данные абслютно по разному, в принципе, одинаково... if elsif else
ну если, допустим, нужно вывести для каждого пользователя по разному... в зависимости от настроек...
(я просто не могу понять все возможности этого, ORM, по этому спрашиваю...
но рекомендуют именно это)
как это еще можно написать в асбстракции?
Код: Выделить всё
if ($s ==1) {push @clausers "User = $s";
if ($s ==2) {push @clausers "User = $s";}
if ($s) {push @clausers "User = $s";}
if ($s) {push @clausers "User = $s";}
if ($s) {push @clausers "User = $s";}
} esle {
if ($s) {push @clausers "User = $s";}
}
$clause = join (" AND ", @clauses );
$sth = $dbh->prepare(SELECT * FROM table WHERE $clause );
Код: Выделить всё
my $cheapfredbooks = $schema->resultset('Author')->find({
Name => 'Fred',
})->books->search_related('prices', {
Price => { '<=' => '5.00' },
});
will produce a query something like:
Код: Выделить всё
SELECT * FROM Author me
LEFT JOIN Books books ON books.author = me.id
LEFT JOIN Prices prices ON prices.book = books.id
WHERE prices.Price <= 5.00
вроде бы одинаково?
Re: MVC && ORM
Добавлено: 2008-11-21 9:48:27
hizel
вывод к Модели не относится, логику вывода решает Представление(View)
что касается ORM то ты получаешь универсальное обращение ко всем СУБД поддерживаемым данным ORM
и SQL пейсать нинада
Re: MVC && ORM
Добавлено: 2008-11-21 9:54:14
ProFTP
ну пыжык и mysql похожи сильно, там подправить не много надо, и сообще-то можно саму базу "перелить" рекурсивно, и есть еще полноценный модуль
http://dzhariy.habrahabr.ru/blog/42400/
который переводит с разных БД, SQlite,PostgreSQl,MySQl точно!
то есть, при построенни запросов, эффективность где-то 5% от этого
и всё?
hizel писал(а):вывод к Модели не относится, логику вывода решает Представление(View)
не понял, ты имеешь ввиду внедрить это в свой движок?
или что такое View, где оно?
Re: MVC && ORM
Добавлено: 2009-01-17 8:15:23
ProFTP
подскжаите кто-то ли в Catalyst не использвать ORM, а DBI?
в документации везде идет про ORM, но мне он не нравится
Re: MVC && ORM
Добавлено: 2009-01-18 9:33:39
hizel
Catalyst как следует из документации может использовать всё что угодно
примеры там на ORM который сваяли сами Каталистовцы
Re: MVC && ORM на perl
Добавлено: 2009-01-18 21:33:35
ProFTP
нашел Catalyst::Model::DBI и Catalyst::Model::DBI::SQL::Library
но вообще-то такое ООП можно сделать самому классами, правда по поводу тестирование будет сложно протестировать правильность
Re: MVC && ORM на perl
Добавлено: 2009-01-31 13:26:09
ProFTP
аномалия какая-то
есть код, это файл login.pm
Код: Выделить всё
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Get the username and password from form
my $username = $c->request->params->{username} || "";
my $password = $c->request->params->{password} || "";
# If the username and password values were found in form
if ($username && $password) {
# Attempt to log the user in
if ($c->authenticate({ username => $username,
password => $password } )) {
# If successful, then let them use the application
$c->response->redirect($c->uri_for('/database'));
return;
} else {
# Set an error message
$c->stash->{template} = '/home/data/www/MyApp/root/login.tt';
$c->stash->{error_msg} = "Bad username or password.";
}
}
# If either of above don't work out, send to the login page
}
ошибка
Код: Выделить всё
Caught exception in MyApp::View::HTML::Template->process "HTML::Template->new() : Cannot open included file login :
file not found. at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1658
HTML::Template::_init_template('HTML::Template=HASH(0x9af7d10)') called at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1238
HTML::Template::_init('HTML::Template=HASH(0x9af7d10)') called at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1124
HTML::Template::new('HTML::Template', 'filename', 'login', 'path', 'ARRAY(0x9a9ed6c)', 'die_on_bad_params', 0, 'cache', 1, ...)
called at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/View/HTML/Template.pm line 96
Catalyst::View::HTML::Template::render('MyApp::View::HTML::Template=HASH(0x9799994)', 'MyApp=HASH(0x9b1e488)', 'login') called
at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/View/HTML/Template.pm line 59
почему "login" из param идет в шаблон?
шаблон ругается на то что откуда-то взляся login
шаблон работатет, тестовые страницы работают