Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> class DataBase 
:(
    Опции темы
ksnk
Дата 19.3.2013, 08:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Вообще-то все драйвера и обертки нужны для того, чтобы писать красиво  smile То есть сначала нужно придумать как это будет написано, а потом уже реализовать, если это возможно.
Fortop предлагает писать так:
Код

// one.php
$db = new SuperWrapper(Connection::getInstance());
$db->query(......)
// two.php
$somewhereElse = new DuperWrapper(Connection::getInstance());


А baldina как предпочитает видеть этот кусок?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 19.3.2013, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



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

Цитата(Fortop @  19.3.2013,  02:11 Найти цитируемый пост)
Цитата(baldina @  18.3.2013,  23:11 )
потом обнаруживаются проблемы с последовательностью их инициализации
С последовательностью инициализации кого?

к несчастью к php это в малой степени относится (к несчастью - потому что провоцирует на применение). в php проблема возникает лишь в случае зависимости объектов, при которой требуется определенный порядок инициализации. в случае решения на основе синглтонов некому этот порядок обеспечить и контролировать.

я вижу решение в использовании единственного "как бы" синглтона - объекта типа Application, который и порядок инициализации обеспечивает, и предоставляет доступ к объектам, глобальным в контексте приложения, и сам является масштабируемым.

Добавлено через 5 минут и 23 секунды
Цитата(ksnk @  19.3.2013,  08:25 Найти цитируемый пост)
А baldina как предпочитает видеть этот кусок? 

Цитата(baldina @  18.3.2013,  17:51 Найти цитируемый пост)
$app->getDb() 

т.е. как угодно, но получая соединение из объекта приложения
Код

$db = new SuperWrapper($app->getDb());
// or
$db = $app->getSuperWrapperDb();
// or
$db = $app->getDb()->applyWrapper('Super');

PM MAIL   Вверх
Fortop
Дата 19.3.2013, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(baldina @  19.3.2013,  10:16 Найти цитируемый пост)
я вижу решение в использовании единственного "как бы" синглтона - объекта типа Application, который и порядок инициализации обеспечивает, и предоставляет доступ к объектам, глобальным в контексте приложения, и сам является масштабируемым.

Наводящий вопрос.

Каким образом оно масштабируется?

Добавлено через 1 минуту и 57 секунд
Цитата(ksnk @  19.3.2013,  08:25 Найти цитируемый пост)
Вообще-то все драйвера и обертки нужны для того, чтобы писать красиво 

Увы, не для "красиво". А для того, чтобы не было мучительно больно в процессе поддержки и расширения приложения smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
baldina
Дата 19.3.2013, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Fortop @  19.3.2013,  13:19 Найти цитируемый пост)
Каким образом оно масштабируется?

добавлением метода в класс Application
само приложение может быть масштабировано созданием нескольких объектов Application (хотя к задачам веб это думаю не относится))
PM MAIL   Вверх
Fortop
Дата 19.3.2013, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(baldina @  19.3.2013,  13:36 Найти цитируемый пост)
само приложение может быть масштабировано созданием нескольких объектов Application

Итого? получаем кучку тех же самых синглтонов?  smile 
В чем тут отличие от масштабирования приложений на пхп?
И как порядок инициализации может мешать подобному масштабированию?  smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 19.3.2013, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(Fortop @  19.3.2013,  13:19 Найти цитируемый пост)
Увы, не для "красиво".
Красота не бывает абстрактной. Она обязана приносить пользу  smile 

В программировании "красивая" польза будет
-- поддержка проекта, в дальнейшем, чужими людьми. Решается достаточной документацией и комментариями.
-- возможность дальнейшего роста проекта, добавление новых возможностей, фич. Решается проектированием и выбором масштабируемых решений.
-- повторная используемость кода. Это когда код (классы, функции и кусочки кода) в меру тупо и без особых изменений могут быть скопированы в другой, новый проект и там заработают правильно и достаточно эффективно. 

Вот эта третья красивость тянет за собой минимизацию зависимостей от окружения. Слова, которые определяются в других классах-функциях, должны по возможности исключаться, или быть изолированы в отдельном месте класса - функции... Так чтобы это не противоречило остальным факторам "красивого кода".


Это сообщение отредактировал(а) ksnk - 19.3.2013, 17:34


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 19.3.2013, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Fortop @  19.3.2013,  17:01 Найти цитируемый пост)
Цитата(baldina @  19.3.2013,  13:36 )
само приложение может быть масштабировано созданием нескольких объектов Application
Итого? получаем кучку тех же самых синглтонов?
они уже не синглтоны, в том то и дело smile

В чем тут отличие от масштабирования приложений на пхп?

не php, а web. и если бы были, уже кто-нить придумал бы соотв. архитектурное решение
пример: приложение как расчетный модуль. если приложение организовано через единственный объект, можно завести еще один объект и параллельно решать две однотипные задачи. а если приложение содержит ряд синглтонов (или просто глобальных переменных)? 

Цитата(Fortop @  19.3.2013,  17:01 Найти цитируемый пост)
И как порядок инициализации может мешать подобному масштабированию?   

порядок инициализации может мешать масштабированию, если он требуется, но никто им не управляет
PM MAIL   Вверх
Fortop
Дата 19.3.2013, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(baldina @  19.3.2013,  18:30 Найти цитируемый пост)
приложение как расчетный модуль. если приложение организовано через единственный объект, можно завести еще один объект и параллельно решать две однотипные задачи. а если приложение содержит ряд синглтонов (или просто глобальных переменных)? 

В php нет тредов.
Поэтому завести еще один объект и решать параллельно можно только вместе с новым процессом.

А поскольку процессы между собой изолированы, то никаких сложностей не возникает (если вы, конечно, не применяли ухищрений, например, с shmop) ни с рядом синглтонов, ни с глобальными переменными.

Цитата(baldina @  19.3.2013,  18:30 Найти цитируемый пост)
порядок инициализации может мешать масштабированию, если он требуется, но никто им не управляет 

Это не относится к работе синглтонов, пула и т.п. в рамках скрипта.

Т.е. либо порядок инициализации никак не влияет на работу приложения и соответственно свободно масштабируем.
Или если порядок инициализации мешает масштабированию, то в случае с php скорее всего ваш скрипт нерабочий даже в единственном числе (хотя и есть нюансы, например, связанные с эксклюзивным доступом к каким-либо ресурсам системы)


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 19.3.2013, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Fortop, что в твоём понимании масштабирование..? Просто читаю и чем больше, тем хуже начинаю понимать  smile 

Цитата(Fortop @  19.3.2013,  19:58 Найти цитируемый пост)
хотя и есть нюансы, например, связанные с эксклюзивным доступом к каким-либо ресурсам системы
а доступ к базе данных к этому не относится?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 19.3.2013, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Fortop @  19.3.2013,  18:58 Найти цитируемый пост)
В php нет тредов.

во-первых, параллельно можно работать кооперативно. во-вторых, речь шла об архитектуре вообще

Цитата(Fortop @  19.3.2013,  18:58 Найти цитируемый пост)
в случае с php скорее всего ваш скрипт нерабочий даже в единственном числе

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

Добавлено через 7 минут и 8 секунд
Цитата(baldina @  19.3.2013,  19:37 Найти цитируемый пост)
параллельно можно работать кооперативно

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

глобальный контекст, как правило, существует - это контекст приложения. он (контекст) может быть размазан по файлам, объектам (синглтонам), глобальным переменным. это допустимо, но усложняет внесение изменений, тем более расширение. сбор всего этого добра в одном месте - упрощает. в последнем случае техника синглтона не требуется.
PM MAIL   Вверх
baldina
Дата 19.3.2013, 19:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



итог: создание экземпляра объекта db и т.п. и его предоставление приложению - дело не библиотеки (доступа к бд), а приложения. т.к. библиотека не знает в рамках какой архитектуры она будет работать, а предоставление синглтона на уровне библиотеки (тем более без возможности альтернативного создания объекта) как минимум стимулирует неправильное использование в рамках конкретной архитектуры.

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

Это сообщение отредактировал(а) baldina - 19.3.2013, 19:59
PM MAIL   Вверх
Fortop
Дата 19.3.2013, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(Gold Dragon @  19.3.2013,  19:34 Найти цитируемый пост)
Fortop, что в твоём понимании масштабирование..? Просто читаю и чем больше, тем хуже начинаю понимать   

В смысле?
Масштабирование это увеличение используемых для решения задачи ресурсов.

Фокус в том, что для многих языков оно доступно через многозадачность в потоках.
Но php не поддерживает подобное решение (и это во многом его плюс).
Т.е. любое масштабирование задачи на php сводится к запуску дополнительных копий скрипта (на этой машине или многих других машинах - не суть важно).
Поэтому у задач на пхп обычно нет тех проблем, на которые пытался ссылаться baldina.

Т.е. конечный php-скрипт с его пространством имен и есть тот самый Application
В многих других языках все не так просто.

Цитата(Gold Dragon @  19.3.2013,  19:34 Найти цитируемый пост)
а доступ к базе данных к этому не относится?

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

Добавлено через 5 минут и 17 секунд
Цитата(baldina @  19.3.2013,  19:37 Найти цитируемый пост)
в достаточно сложном приложении есть немало одинаковых мест, каждое из которых должно выполняться в своём контексте. зависимость от синглтона делает его неотъемлемой частью любого контекста, ввод нового контекста - заплатки и костыли.

Это все справедливо. В частности поэтому я обратил внимание на то, что класс работы с БД не обязан быть синглтоном smile
Но применительно к области применения php и конкретно соединения с БД - стараются минимизировать их число для приложения.

Поэтому
Цитата(Fortop @  18.3.2013,  14:48 Найти цитируемый пост)
А я думал что он нужен для подключения/адаптера, и то не всегда


Обращаю внимание на фразу "и то не всегда".
Т.е. подключение/адаптер не всегда обязан быть синглтоном smile



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 19.3.2013, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(Fortop @  20.3.2013,  00:13 Найти цитируемый пост)
Масштабирование это увеличение используемых для решения задачи ресурсов.
аа, значит правильно понял.. А зачем мне расширять ресурсы??? Я смотрел много движков где это закладывается, но реально это вообще или очень и очень редко используется... Вот для фреймворков может быть это актуально. А вот для движка для моего сайта вообще не нужно... Я написал класс для управления базой что он и делает... А масштабирование это не только для меня увеличение человека/часов, но и выброшенные деньги  smile Так что мера должна быть в желаниях

Цитата(Fortop @  20.3.2013,  00:13 Найти цитируемый пост)
что класс работы с БД не обязан быть синглтоном 
да конечно не обязан(!), но как правило является таковым для простых вопросов (и даже не очень) smile т.к. не нужно ни масштабирование ни множественное подключение



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 19.3.2013, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(Gold Dragon @  19.3.2013,  23:36 Найти цитируемый пост)
А зачем мне расширять ресурсы???

Конкретно тебе? Без понятия.

А у нас на 300к уников в сутки виртуалка впала в ступор, пришлось поднимать еще две.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
baldina
Дата 20.3.2013, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Fortop @  19.3.2013,  23:13 Найти цитируемый пост)
Масштабирование это увеличение используемых для решения задачи ресурсов.

почти))) увеличение ресурсов - средство, а не цель. цель - увеличение производительности/числа решаемых задач.
еще можно масштабировать функционал. в последнем случае в применении к пхп уместен пример перерастания микрофреймворка в монстрофреймворк, который будет успешен при удачной архитектуре исходника.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.