Если вкратце – мне известны 2 очень хороших ORM’а, написанных на PHP. Которыми очень удобно пользоваться, которые ведут себя именно так, как ты этого ожидаешь (если ты запросил массив записей из бд – оно тебе и вернет массив ActiveRecord’ов, а не обычный двумерный PHP’шный массив), которые понимают разницу между записью и таблицей (в моделях CI такой разницы нет) и так далее.
Эти два ORM: Propel и Doctrine. Доктрина удобнее, как по мне, и функциональнее к тому же. В недостатки обоих можно записать “тормознутость”. Но если не делаешь сайт с, например, >100k хитов в сутки – это всё равно не заметишь.
Для меня с некоторых пор хорошее проектирование системы значит гораздо больше, чем её прямая производительность, поэтому я выбираю такие решения.
Идея неплоха, конечно, только сложно как-то все… Если брать ту же Java, и соответственно J2EE – там визуально это все делается и куча кода автогенерируется… И для масштабируемости – распределенные вычисления, на несколько серверов…
Не подскажете чего-нибудь почитать про doctrine, чтобы сжато и с примерами? :-)
А хорошее проектирование системы все-таки важнее производительности, при ряде условий: – наличие масштабируемости; – в самых “узких местах” по-моему можно и нужно делать предельно производительно, в ущерб красоте :-)
Что ты понимаешь под генерацией кода? Доктрина может тебе сгенерировать модель из структуры БД и наоборот. Описывать модель можно как в XML, так и Yaml.
По поводу документации – официальный сайт. Документация там отличная.
Насчет красоты – лично я считаю, что ты не прав. Красиво можно и нужно делать всё и всегда. Производительность достигается за счет кеширования всего и вся. А масштабируемость – это уж как повезет, но обычно – за счет продуманной архитектуры как раз масштабируемость и проявляется, а приложения написаные “чтобы было производительно” как раз хрен отмасштабируешь, да и кешировать на этом “низком уровне” сложнее, чем на более высоком.
1. Под генерацией кода – именно сгенерировать модель из структуры БД. Видимо, проморгал, будем исправляться.
2. Лишнего много :-(
3. Масштабируемость всеж-таки недооценивается только до столкновения с чем-то невообразимым на текущий момент :-) Далее – полностью согласен, именно поэтому хороший код и должен стоять во главе угла – потому что его проще поддерживать. Но если хороший код не удовлетворяет запросам конечных пользователей – то по большму счету грош ему цена… Кэшируемость хорошая вещь, конечно, но:
* случается, что данные не только читают, но еще и записывают
* есть необходимость в постоянной валидации кэша, или же пользователь получает потенциально устаревшие данные
* кэши, особенно в памяти, имеют свойство заполняться и расходовать память неэффективно :-(
Хотя, конечно, баланс между первым и вторым каждый выбирает для себя сам. Оттого и придумывались разные языки программирования, разные фреймворки, разные базы данных… Можно, например, объектными базами пользоваться – хотя я не сталкивался, но что-то их никто не пользует, а вот ORM как адаптер – используют :-)
2. На все случаи жизни. Да и вообще – хороший ORM маленьким быть по определению не может. А то, что используется по умолчанию в CI и CakePHP – это просто детский лепет, который вообще юзать невозможно.
3. Масштабируемость вообще зависит от многих факторов. И я в этот разговор влезать особо не хочу – я никогда не делал сложных, высоконагруженных приложений. И вряд ли в ближайшее время буду. Хотя было бы интересно.
Так что пока я предпочитаю пользоваться (и изучать) тем, что реально очень удобно для меня. Doctrine входит в список таких “интересных” продуктов.
В CI таки да, не вполне комфортно – мышиная возня с написанием аналогичных оберток БД самостоятельно. Напоминает программирование в текстовом редакторе вместо полноценного IDE.
CakePHP вообще не смотрел даже, не ставилось цели кормить монстров )
Как Эккеля дочитаете – попробуйте с J2EE поиграться, если интересно еще более всеобъемлющее решение.
February 2nd, 2008 at 00:42
хмм… надо будет потестить..
February 2nd, 2008 at 11:14
А поподробней? Что за зверь?
February 2nd, 2008 at 11:58
Можно :)
Если вкратце – мне известны 2 очень хороших ORM’а, написанных на PHP. Которыми очень удобно пользоваться, которые ведут себя именно так, как ты этого ожидаешь (если ты запросил массив записей из бд – оно тебе и вернет массив ActiveRecord’ов, а не обычный двумерный PHP’шный массив), которые понимают разницу между записью и таблицей (в моделях CI такой разницы нет) и так далее.
Эти два ORM: Propel и Doctrine. Доктрина удобнее, как по мне, и функциональнее к тому же. В недостатки обоих можно записать “тормознутость”. Но если не делаешь сайт с, например, >100k хитов в сутки – это всё равно не заметишь.
Для меня с некоторых пор хорошее проектирование системы значит гораздо больше, чем её прямая производительность, поэтому я выбираю такие решения.
February 3rd, 2008 at 18:22
Как-то очень сложно… Разве Active Record Class в CodeIgniter не подходит?
February 3rd, 2008 at 22:25
Мне – нет. Меня он очень многим не устраивает. :)
February 4th, 2008 at 18:04
Ещё один плюсик CI.
April 16th, 2008 at 02:33
Идея неплоха, конечно, только сложно как-то все… Если брать ту же Java, и соответственно J2EE – там визуально это все делается и куча кода автогенерируется… И для масштабируемости – распределенные вычисления, на несколько серверов…
Не подскажете чего-нибудь почитать про doctrine, чтобы сжато и с примерами? :-)
А хорошее проектирование системы все-таки важнее производительности, при ряде условий: – наличие масштабируемости; – в самых “узких местах” по-моему можно и нужно делать предельно производительно, в ущерб красоте :-)
April 16th, 2008 at 03:00
Что ты понимаешь под генерацией кода? Доктрина может тебе сгенерировать модель из структуры БД и наоборот. Описывать модель можно как в XML, так и Yaml.
По поводу документации – официальный сайт. Документация там отличная.
Насчет красоты – лично я считаю, что ты не прав. Красиво можно и нужно делать всё и всегда. Производительность достигается за счет кеширования всего и вся. А масштабируемость – это уж как повезет, но обычно – за счет продуманной архитектуры как раз масштабируемость и проявляется, а приложения написаные “чтобы было производительно” как раз хрен отмасштабируешь, да и кешировать на этом “низком уровне” сложнее, чем на более высоком.
April 16th, 2008 at 03:20
1. Под генерацией кода – именно сгенерировать модель из структуры БД. Видимо, проморгал, будем исправляться.
2. Лишнего много :-(
3. Масштабируемость всеж-таки недооценивается только до столкновения с чем-то невообразимым на текущий момент :-) Далее – полностью согласен, именно поэтому хороший код и должен стоять во главе угла – потому что его проще поддерживать. Но если хороший код не удовлетворяет запросам конечных пользователей – то по большму счету грош ему цена… Кэшируемость хорошая вещь, конечно, но:
* случается, что данные не только читают, но еще и записывают
* есть необходимость в постоянной валидации кэша, или же пользователь получает потенциально устаревшие данные
* кэши, особенно в памяти, имеют свойство заполняться и расходовать память неэффективно :-(
Хотя, конечно, баланс между первым и вторым каждый выбирает для себя сам. Оттого и придумывались разные языки программирования, разные фреймворки, разные базы данных… Можно, например, объектными базами пользоваться – хотя я не сталкивался, но что-то их никто не пользует, а вот ORM как адаптер – используют :-)
April 16th, 2008 at 03:31
2. На все случаи жизни. Да и вообще – хороший ORM маленьким быть по определению не может. А то, что используется по умолчанию в CI и CakePHP – это просто детский лепет, который вообще юзать невозможно.
3. Масштабируемость вообще зависит от многих факторов. И я в этот разговор влезать особо не хочу – я никогда не делал сложных, высоконагруженных приложений. И вряд ли в ближайшее время буду. Хотя было бы интересно.
Так что пока я предпочитаю пользоваться (и изучать) тем, что реально очень удобно для меня. Doctrine входит в список таких “интересных” продуктов.
April 16th, 2008 at 04:05
В CI таки да, не вполне комфортно – мышиная возня с написанием аналогичных оберток БД самостоятельно. Напоминает программирование в текстовом редакторе вместо полноценного IDE.
CakePHP вообще не смотрел даже, не ставилось цели кормить монстров )
Как Эккеля дочитаете – попробуйте с J2EE поиграться, если интересно еще более всеобъемлющее решение.