Каждый начинающий программист, в начале своего тернистого (но крайне увлекательного) пути сталкивается с необходимостью писать базовые классы. Эти классы со временем совер�?енствуются, изменяются, в них добавляется новый функционал. Так и я начал писать свой повторяемый набор классов.

Т.к. ни один проект не обходится без данных, первоначально было задуманно писать класс баз данных. Обычно при работе именно с базами возникают фатальные о�?ибки, которые могут привести ко взлому всего портала. В таком деле торопиться нельзя, и нужно его тщательно обдумать :-) Но эта статья вовсе не о защите от взлома, а скорее собрание мыслей и интересные ходы, которые я почерпнул листая книжки.

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) — в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена целиком либо успе�?но, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта.

А зачем использовать транзакции? Вижу в этом несколько плюсов:

  1. Будем использовать тогда, когда нам крайне важно, чтобы ныне�?ние изменения базы были успе�?но выполнены, иначе предыдущие изменения не имеют смысла или же даже опасны. Как пример: если в рамках одной функции вносятся изменения в несколько таблиц, то использование транзакции не позволит нару�?иться целостности ссылок.
  2. Удобно создавать этакие сэйвпоинты, а потом одним махом делать подтверждение или же откат до какой-либо из точек сохранения;
  3. �? конечно же важное: принцип невме�?ательства. Если вы все же намудрили при редактировании баз, то это никак не отразится на других пользователях системы, которые работают с этой базой данных, до тех пор пока вы не подтвердите свои о�?ибочные действия.

Современные версии популярных СУБД такие как MySQL, PostgreSQL, Oracle, MSSQL Server поддерживают транзакции.

Если вы учтёте эти два свойства при проектировании своего класса работы с базами данных, то получится удобный в использовании и грамотный класс, который можно будет легко использовать и в последующих проектах без особых изменений.

4 Комментари(я/ев) to “Базы данных. Транзакции.”

  1. ivanpa Says:

    обязательно перечитаю,ежели вздумаю этим когда-то заняться-))

  2. Hapz Says:

    Афигенски написанно, яб так не смог

  3. irina Says:

    Что касается непосредственно, то мне кажется что ее актаульность будет известна только через некоторое время.

  4. �?нна Says:

    Ресурс познавательный. Только мне сложно понять что к чему - много информации, ссылок. Может сотворить какой-нибудь путеводитель по сайту для новичков?

Leave a Reply

Нам помогают
Дружественные сайты: