Базы данных. Транзакции.
Май 18, 2008
Каждый начинающий программист, в начале своего тернистого (но крайне увлекательного) пути сталкивается с необходимостью писать базовые классы. Эти классы со временем совер�?енствуются, изменяются, в них добавляется новый функционал. Так и я начал писать свой повторяемый набор классов.
Т.к. ни один проект не обходится без данных, первоначально было задуманно писать класс баз данных. Обычно при работе именно с базами возникают фатальные о�?ибки, которые могут привести ко взлому всего портала. В таком деле торопиться нельзя, и нужно его тщательно обдумать
Но эта статья вовсе не о защите от взлома, а скорее собрание мыслей и интересные ходы, которые я почерпнул листая книжки.
1. Шаблон проектирования Singleton (одиночка).
Как правило открытие соединения с базой данных требует гораздо боль�?е ресурсов, чем любые, даже самые сложные, запросы. Поскольку язык php не поддерживает многопоточность своих приложений, и каждый запрос на страницу предполагает связь ли�?ь с одной базой данных, то и нерационально тратить ресурсы и пользоваться боль�?е чем одним соединением с базой данных.
Шаблон Singleton как раз таки гарантирует, что некоторый класс может иметь только один экземпляр, и предоставляет глобальную точку доступа к нему.
<?php
class DataBase {
private function __construct($dsn = null) {
this->conn = DB::connect($dsn);
}
static public function instance() {
static $objDB;
if(!isset($objDB)) {
$objDB = new DataBase();
}
return $objDB;}
}
?>
В кратце поясню этот наглядный пример. Путем объявления функции __construct() – private, мы закрываем доступ к ней извне класса. Единственный способ которым можно создать объект этого класса является статический вызов функции DataBase::instance(), которая в свое время проверит, существует ли объект этого класса, и если несуществует, то создаст новый. Открыл для себя маленький хак
2. Транзакции
Первым делом глядим в википедию, на предмет того, что же собой представляет транзакция.
Транза́кция (англ. transaction) — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена целиком либо успе�?но, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта.
А зачем использовать транзакции? Вижу в этом несколько плюсов:
- Будем использовать тогда, когда нам крайне важно, чтобы ныне�?ние изменения базы были успе�?но выполнены, иначе предыдущие изменения не имеют смысла или же даже опасны. Как пример: если в рамках одной функции вносятся изменения в несколько таблиц, то использование транзакции не позволит нару�?иться целостности ссылок.
- Удобно создавать этакие сэйвпоинты, а потом одним махом делать подтверждение или же откат до какой-либо из точек сохранения;
- �? конечно же важное: принцип невме�?ательства. Если вы все же намудрили при редактировании баз, то это никак не отразится на других пользователях системы, которые работают с этой базой данных, до тех пор пока вы не подтвердите свои о�?ибочные действия.
Современные версии популярных СУБД такие как MySQL, PostgreSQL, Oracle, MSSQL Server поддерживают транзакции.
Если вы учтёте эти два свойства при проектировании своего класса работы с базами данных, то получится удобный в использовании и грамотный класс, который можно будет легко использовать и в последующих проектах без особых изменений.

Май 21st, 2008 at 5:58 пп
обязательно перечитаю,ежели вздумаю этим когда-то заняться-))
Июль 16th, 2008 at 8:50 пп
Афигенски написанно, яб так не смог
Август 9th, 2008 at 10:11 дп
Что касается непосредственно, то мне кажется что ее актаульность будет известна только через некоторое время.
Сентябрь 1st, 2008 at 1:41 дп
Ресурс познавательный. Только мне сложно понять что к чему - много информации, ссылок. Может сотворить какой-нибудь путеводитель по сайту для новичков?