За последние 24 часа нас посетил 18281 программист и 1634 робота. Сейчас ищут 1685 программистов ...

goDB — библиотека работы с MySQL

Тема в разделе "Решения, алгоритмы", создана пользователем vasa_c, 10 фев 2008.

  1. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    где инстанция класса на каждый результат?
    здесь вся тема пока в основном сводится к байтодрочу, свичодрочу и ифодрочу.

    аргументы

    Придёт Мр.Мит и скажет - нафига столько классов. Исключения ему уже не понравились.
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    PHP:
    1.  
    2.   55.          if ($fetch == 'irow') {
    3.   56.              return new goDBResultRow($result);
    4.   57.          }
    5.   58.          if ($fetch == 'iassoc') {
    6.   59.              return new goDBResultAssoc($result);
    7.   60.          }
    8.   61.          if ($fetch == 'icol') {
    9.   62.              return new goDBResultCol($result);
    10.   63.          }
    11.   64.          if ($fetch == 'iobject') {
    12.   65.              return new goDBResultObject($result);
    13.   66.          }      
    то есть ты сам не знаешь чем плох синглтон?
     
  3. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Это итераторы, которые могут использоваться наравне с обычными массивами, в некоторых случаях. Злоупотреблять ими не нужно.
    http://pyha.ru/go/godb/fetch/
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    не надо, сам, сам, написал - ответь :)
     
  5. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    сучке, мне на работе уж нужно было 30 минут назад быть)

    плох тем, что привязывает нас к конкретной реализации класса, плохо тестируется.

    гг, http://pyha.ru/forum/topic/4820.0
     
  6. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    ах, да, да, несвязность, инверсия зависимостей...
    ещё юнит-тесты на всё и подробный UML.
    и пых сменить на яву.

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

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

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    это я знаю, что гоДБ умеет по-всякому. Просто можно выкинуть добрый пласт кода или хотя бы переместить его в отдельный класс

    мы еще вам покажем кузькину мать
     
  8. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  9. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    юнит-тесты это круто
     
  10. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    godb 1.2.2
    Одно из важнейших нововведений - наконец то использованый свичи вместо ифов в одном из методов.
    Это увеличило удобство использования неимоверно.
     
  11. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    метод query умеет слишком много. сделай так чтобы он возвращал result object у которого уже будут методы для получения данных в нужном виде
     
  12. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  13. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    tenshi
    Я бы не возвращал сразу.
    Оставил бы внутри класса, и возвращал уже fetch.

    IPB etc.
    PHP:
    1. <?php
    2. $this->DB->select(array('select'  => '*',
    3.                                      'from'   => 'tab'
    4.                            ));
    5. while($res = $this->DB->fetch())
    6. {
    7.  //some code
    8. }
     
  14. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    PHP:
    1. <?
    2. $table= $this->db->query( 'select * from [tab]' )->row_list
    3. var_dump( $table ); // repl
    4. foreach( $table as $num => $row ):
    5. //some code
    6. endforeach;
     
  15. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    tenshi
    Таки да :)
     
  16. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Чем это будет отличаться, от стандартного поведения, где mysqli возвращает объект, который требуется потом обрабатывать? Или даже от mysql_query(), которая возвращает ресурс и его также приходится пропускать через mysql_fetch_* и подобное?

    admyx, о вашем предложении сказано в FAQ, п.2.
     
  17. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Угу, прочитал.
     
  18. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    vasa_c
    Способ используемый mysqli в возвращением объекта универсален и может быть реализован для всех прочих драйверов.
    Плюс в том, что не происходит лишнего перебора данных и перезаписывание их в другую переменную. А если данных много? Получится out of memory.
     
  19. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Если данных много (весьма редкий случай в веб-приложениях), для этого предусмотрены итераторы + возможность получения тогоже mysqli_result.

    В большинстве случаев, перебор данных всё же происходит, только производится вручную программистом после запроса.
     
  20. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    я тоже скажу, что у меня, например, юзается возврат для запросов типа SELECT объекта результата, но я почти всегда извлекаю либо одну запись, либо все, причем в той же строчке абстракции, что и выполнение запроса, поэтому немного солидарен с vasa_c
     
  21. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    > Чем это будет отличаться, от стандартного поведения, где mysqli возвращает объект, который требуется потом обрабатывать?

    а должно пренепременно отличаться?


    > Или даже от mysql_query(), которая возвращает ресурс и его также приходится пропускать через mysql_fetch_* и подобное?

    хочешь услышать лекцию о том чем ооп отличается от процедурщины?
     
  22. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    Костян, это не повод все действия запихивать в один метод используя антипаттерн "magic words"
     
  23. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Мне не нравится каждый раз выполнять монтонный однообразные действия, поэтому для меня должно отличаться. Это основное предназначение большинства библиотек - упрощение однообразных действий.
    При этом я осознаю, что лично для вас удобнее по-другому и ниразу ничего не навязываю.

    Спасибо, лично от вас я этих лекций здесь наслушался, не хочу.
     
  24. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    +1 ;)
     
  25. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Чего вы так обозлились? =)