VCMS - движок для твоего сайта

8.81K
.
# AlkatraZ (17.01.2017 / 21:51)
А ты попробуй это:
Aura.Sql - ну почти как DBAL, практически нативный, но расширенный PDO (что хорошо).
[url=https://github.com/auraphp/Aura.SqlQuery]A
Про ауру почитаю на досуге.
.
Delphinum
# AlkatraZ (17.01.2017 / 22:13)
Ну это решается крайне легко и без всяких Доктрин, или ОРМ.
это решается только частично легко без ORM, и как правило с очень некрасивым интерфейсом и копипастой кода, ORM собственно и нужна для того, чтобы дать программисту красивый интерфейс.

В общем, что нужно ORM:
1. Преобразование данных БД -> PHP -> БД
2. Сборка данных из объектов, запись данных в объекты
3. Связи по правилам ООП, а не реляционные

Но обычно для этого нужно реализовать еще:
4. Шаблон UnitOfWork
5. Шаблон Lazy Load, так как иначе программисту нужно помнить, что часть данных не загружена в объект, а это уже не правильно, программист должен работать с объектами как будто они все уже есть в памяти
6. Персистентные связи - то есть ты пишешь в свойство comments класса Blog новый объект Comment и он сохраняется в БД без дополнительной мишуры
7. Унификация интерфейса для всех видов хранилищ, даже SqlLite (доктрина и это умеет)
...
n. PROFIT
.
╭∩╮ (`-`) ╭∩╮
# Delphinum (17.01.2017 / 22:15)
4. Шаблон UnitOfWork
Некое подобие, но для своих нужд, я делал еще в старой реализации Моби.
Зацени метод save() https://github.com/Gazenwagen/ ... p#L79
Согласно канонам UnitOfWork, он запишет в базу только то, что реально менялось.
Если ничего не менялось, то вызов save() в базу ничего писать не будет.
.
╭∩╮ (`-`) ╭∩╮
# vitagame (17.01.2017 / 22:14)
Про ауру почитаю на досуге.
Aura.Sql представляет из себя практически нативный PDO с некоторыми наворотами.
Наиболее интересный из них на мой взгляд, это вместо ->fetch() используешь ->yield() что на больших запросах, а особенно если передаешь данные в шаблон и там уже разворачиваешь по циклу, экономит кучу памяти.
.
AlkatraZ, да, но UnitOfWork позволяет так же:
1. Выполнить запрос разом в виде транзакции, а не десятки запросов по ходу исполнения скрипта
2. Откатить транзакцию целеком, не заботясь о месте, где ее стартануть. Другими словами тебе не нужно раскидывать transactionStart по бизнес логике, все спрятано на уровень инфраструктуры
3. Оптимизировать запрос или исключить ошибки запроса, как на пример при попытке одновременно изменить и удалить одну и ту же запись
.
# AlkatraZ (17.01.2017 / 22:36)
Aura.Sql представляет из себя практически нативный PDO с некоторыми наворотами.
Наиболее интересный из них на мой взгляд, это вместо ->fetch() используешь ->yield() что на больших запросах, а особенн
бла бла бла, пдо... опять пдо.
лучше бы роксдб обсудили
.
ramzes, это другая тема, она с ORM не связана
.
она связана с ускорением, разве нет?
при чем обещает такой прирост что ваши эти вот выигрыши в 5% будут просто смешны, не говоря уже о том что там вроде нет лока при записи и чтении.
по моему это куда интереснее до 1000% ускорения
.
ramzes, любая современная РСУБД умеет так кешить запросы, что говнокод вида:
foreach($users as $user){
  $articles = $db->getUserArticles($user);
  ...
}

Отрабатывает вообще без задержек.

Key-Value вещь хорошая, только вот готовить ее правильно мало кто умеет, да и не альтернатива это классическим БД (реляционным в том числе).
.
что не альтернатива? рокс? так это вообще то модификация мускула вроде как с утра была
Всего: 437