|
Просмотр темы |
Главная -->
Компьютеры -->
Интернет -->
Программирование -->
PERL -->
|
|
« Предыдущий контент Следующий контент »
|
На уровень выше
|
Посмотреть подразделы
|
|
|
 Дата: 1261211026
 Новое: 1261375373
|
|
Посмотреть комментарии этой темы
|
|
|
|
Реализация CRUD + SQL::Abstract на Perl (в MVC Catalyst)
|
|
| В данной статье рассматривается реализация CRUD под perl. Все кто программируют под web знают, что главная проблема веб программирования обработать HTML form тэги (<form></form>) и при этом работать с БД (как правило с различными СУБД), что в некоторых случаях бывает затруднительно. CRUD - (англ. create read update delete — «Создание чтение обновление удаление»):
Реализовано в Django на Python, Ruby on Rails, на многих фреймворках Java и php symfony YII
Catalyst::Controller::FormBuilder от CGI::FormBuilder
Catalyst::Controller::FormFu от HTML::FormFu
Catalyst::Plugin::Form::Processor от Form::Processor
Rose::HTML::Form
Catalyst::Plugin::CRUD
CatalystX::ListFramework::Builder
CatalystX::CRUD::YUI
BasicCRUD
Более детально, например, при ошибке нужно все заполненные данные вернуть пользователю обратно, ну и указать в чем именно ошибка. Для удобного программирования в современных языках программирования есть ORM (англ. Object-relational mapping, русск. Объектно-реляционная проекция) присутствуют практически во всех веб фремворках, они необходимы для решения проблем при работе с реляционными системами управления базами данных. Использование реляционной базы данных для хранения объектно-ориентированных данных приводит к семантическому провалу, заставляя программистов писать программное обеспечение, которое должно уметь как обрабатывать данные в объектно-ориентированном виде, так и уметь сохранить эти данные в реляционной форме. Эта постоянная необходимость в преобразовании между двумя разными формами данных не только сильно снижает производительность, но и создает трудности для программистов, так как обе формы данных накладывают ограничения друг на друга.
Некоторые реализации ORM автоматически синхронизируют загруженные в память объекты с базой данных. Для того чтобы это было возможным, после создания объект-в-SQL-преобразующего SQL-запроса полученные данные копируются в поля объекта, как во всех других реализациях ORM. После этого объект должен следить за изменениями этих значений и записывать их в базу данных.
Системы управления реляционными базами данных показывают хорошую производительность на глобальных запросах, которые затрагивают большой участок базы данных, но объектно-ориентированный доступ более эффективен при работе с малыми объёмами данных, так как это позволяет сократить семантический провал между объектной и реляционной формами данных.
С точки зрения программиста система должна выглядеть как постоянное хранилище объектов. Он может просто создавать объекты и работать с ними как обычно, а они автоматически будут сохраняться в реляционной базе данных.
На практике всё не так просто и очевидно. Все системы ORM обычно проявляют себя в том или ином виде, уменьшая в некотором роде возможность игнорирования базы данных. Более того, слой транзакций может быть медленным и неэффективным (особенно в терминах сгенерированного SQL). Все это может привести к тому, что программы будут работать медленнее и использовать больше памяти, чем программы, написанные «вручную».
Но ORM избавляет программиста от написания большого количества кода, часто однообразного и подверженного ошибкам, тем самым значительно повышая скорость разработки. Кроме того, большинство современных реализаций ORM позволяют программисту при необходимости самому жёстко задать код SQL-запросов, который будет использоваться при тех или иных действиях (сохранение в базу данных, загрузка, поиск и т. д.) с постоянным объектом.
на perl: Class::DBI (CDBI), DBIx::Class(DBIC), Rose::DB::Object (RDBO) и другие
Важно сказать, про шаблоны программирования на которых основаны фремворки, большинство из них которые под web основаны на модели MVC, позволяют использовать основную бизнес логику в контролерах, модели как правило дополнительный классы (тот же ORM) и представление - это HTML или XML шаблон. Но как правило у них очень много возможностей и по этому много исходного кода, они очень ресурсоемкие, единственное целесообразно использовать их в очень больших проектах. Многие программисты не согласны с тем как построенные данные фремворки, главный недостаток, отсутствие провидения большого рефакторинга с помощью тестирования для улучшения парадигм или для ускорение работы программ (и уменьшение потребляемой памяти). Что использовать выбирайте сами.
покажу свой класс реализацию CRUD для SQL::Abstract
Примечание:
1) я продемонстрировал реализацию CRUD, для моих проектов этого было вполне достаточно, я не делал класс максимально удобно и с большими возможностями, по той причине, что каждый может написать/дописать так как захочет.
2) если что-то не понятно - спрашивайте, потому что я не знаю, то что вы не знаете, по этому комментарнии написал слабые.
3) использовать можно не только в MVC Catalyst.
как работает:
на счет экранирование тэгов от XSS, можно посмотреть на разные варианты, вот вариант взят с Ikonboard
####
####
####
и пример из книге Джонатана Роквея “Catalyst”
используется: MVC Catatalyst, DBIx::Class, FormBuilder
зеркало
|
|
|
|
|
|
|
|
|
|
| Группы:
|
|
Групп не найдено!
|
|
|
|
|
|
| Фотоальбомы:
|
|
Фотоальбомов не найдено
|
|
|
|
|
|
| Видеоальбомы:
|
|
Видеоальбомов не найдено
|
|
|
|
Комментарии |
|
| 1 | | 2 |
|
|
test02
:: :: :: 1261212616 :: ссылка :: ::
|
UPD: обновил |
test02
:: :: :: 1261213299 :: ссылка :: ::
|
обновил еще, может еще написать? тест |
ProFTP
:: :: :: 1261389842 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389847 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389852 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389871 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389885 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389891 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389898 :: ссылка :: ::
|
тест тесттест тест тест тест |
ProFTP
:: :: :: 1261389904 :: ссылка :: ::
|
тест тесттест тест тест тест0 |
|
|
|
|
|
|