ФорумПрограммированиеPHP для идиотов → Опять DBAL

Опять DBAL

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 13:42, спустя 1 минуту 24 секунды

    Имеем некий DB Abstraction Level Layer. Чтение строк (неважно чего) выглядит так:

    $result = $db->query('SELECT блаблабла') or error('всё сломалось', __FILE__, __LINE__, $db->error());
    while ($line = $db->fetch_assoc($result))
    {
    // всё-равно что.
    // в конечном счёте данные будут выведены на страницу через "шаблон"
    // типично такое говно:
    $line['text'] = htmlspecialchars($line['text']);
    // копятся данные как-то так:
    $myTpl->addItem($line);
    }

    Здесь функция error() создает страничку с сообщением об ошибке и делает exit();
    Приводить исходники DBAL и error смысла нет и так всё понятно.

    IMHO, следующий уровень абстракции и юзабельности БЕЗ псевдообъектного мозголомства должен выглядеть так:

    $allLines = $db->allLines('SELECT блаблабла');
    $myTpl->addItem($allLines);

    1. Здесь нет перехвата ошибки через error(). Вместо этого внутри DBAL должны генерироваться trigger_error(), а на старте приложения должен стоять set_error_handler() и в обработчике вычитывание file и line через debug_backtrace()
    2. Здесь нет цикла чтения. Такая регулярная операция должна делаться через сам DBAL. allLines()
    3. Экранизация html перед выводом — задача модуля представления. Если в нем нет встроенного htmlspecialchars(), вы делаете слишком много лишней работы.

    Помоему всё достаточно очевидно, но почему-то в "крутых" движках до этого не доходят. Обсудим?
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 9:32, спустя 19 часов 49 минут 5 секунд

    artoodetoo, в моем все это есть.

    я делаю даже проще

    $tpl->items = $db->select("users");

    больше я ничего не делаю, существующие дбал которые я юзал - гавно, годб я не юзал не знаю :) но наю почему не стал юзать - потому что нет билдеров стандартных вещей.
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 9:38, спустя 6 минут 34 секунды

    Забыл описать "псевдообъектное мозголомство". Это когда придумывают класс "запись".

    $db->query('SELECT блаблабла');
    while($result = $db->fetch())
    {
    try {
    $resultObj = new RowObject ($result);
    //…
    // ну мы должны как-то оправдать его существование
    $myTpl->addItem($resultObj->escaped('text'));
    unset($resultObj);
    } catch (Exception $e) {
    die('Всё сломалось. '.$e->getMessage());
    }
    }


    Смешно? А ведь бывает такое! Индийское понимание классов.


    дуд, а твой select("users") — здесь "users" это полный SQL или некая ссылка?
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 9:52, спустя 13 минут 43 секунды

    artoodetoo, да, это пиздец )))))))) я про SqlRow класс =))))

    аспнетчики нах.

    у меня это построитель запросов select("users" = select * from users

    $db->select("users",10); = select * from users where id = 10
    $db->select("users",10,"username") = select username from users where id=10

    ну и там много чего, просто он неудобен, dudesql поудобнее будет но надо собраться с силами и дописать его до конца, тогда можно будет использовать мощ ахуенного класса в своих разработках :)
    Спустя 115 сек.
    могу дополнить что есть такая архитектура еще

    $result = (DBResult)$DB->query("select * from users");

    while($row = (DBResultRow) $result->fetch())
    {
    echo $row->field("username");
    }


    …. это я называю пиздецом …
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 12:32, спустя 2 часа 39 минут 42 секунды

    DB Abstraction Level

    DBA Layer
    Спустя 168 сек.
    artoodetoo, да, это пиздец )))))))) я про SqlRow класс =))))

    аспнетчики нах.

    нихуя это не пиздец это называется Data Asccess Object
    но ты прав от тут нах не всрался
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 4 июля 2009 г. 13:41, спустя 1 час 9 минут 32 секунды

    о level/layer, всралась ашипка  :)

    думал то я о том на каком level, этот layer

    http://en.wikipedia.org/wiki/DBAL
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!