CakePHP для больших проектов - PullRequest
       2

CakePHP для больших проектов

5 голосов
/ 10 февраля 2011

Мы оцениваем некоторые фреймворки PHP для продуктивного веб-сайта.CakePHP выглядит довольно интересно, но мы понятия не имеем, соответствует ли он нашим потребностям.

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

Scaffolding выглядит довольно хорошо для базовых интерфейсов администрирования.Как легко настроить этот материал.Допустим, у меня есть внешний ключ на одной из моих таблиц.Когда я создаю страницу скаффолдинга, автоматически ли CakePHP создает для меня выпадающий список со всеми возможными элементами?Что если я хочу отфильтровать возможные элементы?Допустим, я хочу объединить два поля в одно поле в части представления, но когда я редактирую его, я должен иметь возможность редактировать оба этих поля по отдельности.Это работает? Как вы думаете, вы были быстрее в разработке с CakePHP, чем, скажем, с простым PHP?

Ответы [ 6 ]

8 голосов
/ 11 февраля 2011

Это действительно зависит от вашего определения «большой». Вы имеете в виду большие наборы данных? Очень сложная модель предметной области? Или просто много-много разных контроллеров / действий?

Запись / чтение данных .

Все, что вы можете делать с простым SQL, вы можете делать в CakePHP. Это может быть не всегда хорошо, но в худшем случае это не хуже, чем прямой SQL.

Но вы действительно не должны думать о запросах. Вы должны думать о своей доменной модели. CakePHP реализует шаблон активной записи. Это работает очень хорошо, если ваша модель предметной области хорошо сопоставляется с активной моделью записи. Но если это не так, то я бы не рекомендовал CakePHP. Если ваша модель домена не соответствует Active Record, вы потратите много времени на борьбу с Cake. И это не весело. Вам было бы намного лучше с платформой, которая реализует шаблон Data Mapper (например, Zend).

1012 * Строительные леса *

Строительные леса являются временными. Он обрабатывает внешние ключи (если вы определяете их как в модели, так и в базе данных), но это все. Вы не можете изменить леса. Но вы можете испечь их!

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

скорость развития

В моем случае, я гораздо быстрее разрабатываю веб-сайт в CakePHP, чем в простом коде. Но только если Active Record подходит для приложения! Смотри мой первый пункт. Даже в этом случае Cake, вероятно, все еще быстрее, но я был бы еще быстрее с более подходящей структурой.

Некоторые другие мысли

большие наборы данных

Если у вас очень большие наборы данных и большие результаты запросов, Cake может стать проблемой. Операция find () хочет вернуть ассоциативный массив, поэтому все строки читаются, анализируются и преобразуются в массивы. Если ваш набор результатов слишком велик, вам не хватит памяти. CakePHP не реализует объекты ResultSet, как и многие другие реализации Active Record, и это является определенным недостатком. В итоге вы вручную просматриваете свои данные с помощью подзапросов. Тьфу. Что подводит меня к следующему пункту:

Массивы

Научитесь любить их, потому что CakePHP любит. Все представляет собой массив, и часто они большие, сложные и глубокие. Это становится действительно раздражающим через некоторое время. Вы не можете добавлять функции в массивы, поэтому ваш код будет более грязным, чем если бы CakePHP использовал бы экземпляры вложенных объектов. Функции, которые вы можете добавить к этим объектам, помогут сохранить ваш код в чистоте.

странности и несоответствия

CakePHP спрятал в себе настоящие мерзкие мерзости. Если Active Record подходит вашему приложению, вы, вероятно, никогда не столкнетесь с ними, но если вы попытаетесь превратить CakePHP во что-то более сложное, вам придется с этим бороться. Некоторые примеры:

  • HABTM через пользовательскую модель использует определение с другой стороны отношений, над которыми вы работаете.
  • Некоторые действительно странные места, где ваши триггеры до / после не вызываются (например, не из updateAll)
  • странное поведение Model-> field (). Это всегда запросы из базы данных. Поэтому будьте осторожны при обновлении данных модели без немедленного сохранения их в базе данных Некоторые функции CakePHP извлекают данные из Model -> $ _ data, а некоторые используют Model-> field (). Результат может быть совершенно другим, в результате чего будут очень трудно выявлять ошибки.

Короче говоря

Я бы настоятельно рекомендовал CakePHP даже для «больших» сайтов, если ваша модель домена хорошо вписывается в Active Record. Если нет, выберите другой каркас.

8 голосов
/ 10 февраля 2011

Я использовал CakePHP, Zend Framework и я также писал приложения «с нуля», не более чем доморощенные классы и тому подобное. На это я хотел бы отметить, что я регулярно использую CakePHP, поэтому принимайте это как хотите.

  • ( Запись / чтение данных, сложные условия ) Вы, безусловно, можете делать все, что упомянули. Другие верны в том, что он пытается абстрагироваться от операций SQL для вас. У меня еще не было запроса, который я не смог бы перевести на «язык» Кейка; сложные геопространственные запросы, объединения и т. д.

  • ( Леса, сложные условия ) Леса на самом деле предназначены только для того, чтобы служить своего рода «началом прыжка», чтобы убедиться, что ассоциации моделей и тому подобное настроены правильно и не должны используется как постоянное решение. С этой целью, да, он будет достаточно хорош для анализа ваших отношений и предоставления соответствующей разметки.

  • ( Ускоренное развитие ) Конечно. Существует большое сообщество с огромным количеством плагинов или примеров, которые помогут вам начать работу. Независимо от того, что вы выберете, выбор фреймворка почти наверняка сделает вас «быстрее», если только для обработки мелочей, возникающих при настройке приложения.

3 голосов
/ 10 февраля 2011

Поскольку вы спрашиваете мнения, то я должен сказать, что я советую ПРОТИВ CakePHP.

Моя самая большая проблема в том, что он все еще использует PHP4 (написанный и созданный код).Итак, зачем идти назад?Он совместим с PHP5, но сам фреймворк вращается вокруг PHP4.

Я бы рекомендовал взглянуть на Symfony или Zend.Symfony - лучший вариант, если вам нужно больше структур - он заставляет вас придерживаться созданной им структуры MVC.

Альтернативой является Zend, но это скорее среда "сделай сам", или, скорее, набор библиотек.Вам нужно собрать все это вместе, и у него нет строгой структуры, такой как Symfony.

Очевидно, что есть и другие фреймворки, но я рекомендую все вышесказанное.Еще один, на который вы, возможно, захотите посмотреть: Codeigniter.

2 голосов
/ 10 февраля 2011

CakePHP пытается абстрагировать базу данных, поэтому вы пишете очень мало SQL (однако вы пишете много фрагментов SQL).

Основной процесс состоит в том, чтобы определить ваши модели, а затем определить отношения между моделями (hasOne, serveTo, hasMany, hasAndBelongsToMany). Вы можете поставить любые условия или порядок по умолчанию для этих ассоциаций, которые вам нравятся. Затем, всякий раз, когда вы выбираете строку из базы данных, любые связанные строки автоматически выбираются вместе с ней. Это очень легко и мощно.

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

Практически все можно переопределить на лету, и вы всегда можете вернуться к написанию собственного SQL, так что Cake ничего не мешает вам сделать ...

Я не нашел большого применения в строительных лесах. Ответ на ваш вопрос - да, он автоматически заполняет объединенные выпадающие списки и т. Д. Но я никогда не использовал его в качестве основы для создания интерфейса. Я склонен использовать инструмент базы данных для раннего заполнения данных, а не для создания лесов.

Я создал и также поддерживаю несколько веб-приложений на CakePHP, и это, без сомнения, быстрее, чем «сворачивание собственного». Но я думаю, что это верно для любой приличной основы!

К сожалению, одним из слабых мест является документация. Зачастую вам нужно получить ответы в Google, так как официальная документация время от времени бывает непростой.

1 голос
/ 11 февраля 2011

Просто используйте Yii Framework, он лучший в этой категории.

0 голосов
/ 10 февраля 2011

(Примечание: это субъективный вопрос. Вы спрашиваете мнения. Поэтому я надеюсь, что вы не возражаете, если я дам свое.)

(Правка: Опс. Я смешал торт с КИ)

Я использовал Code Igniter некоторое время назад.Он сделал все, что должен, и его было довольно легко понять.Однако для больших проектов ему не хватало возможностей.Многие сторонники CI говорят, что в этом его сила, поскольку он сохраняет скорость и мало оперативной памяти.Это правда.

Однако после разработки одного приложения с ним я обнаружил, что ищу другие места, поэтому мне не пришлось бы писать код, который должен был быть написан раньше.Я посмотрел на CakePHP и нашел его слишком ограниченным и автоматическим.В частности, мне нужна была какая-то функциональность ACL.Это привело меня к Zend Framework.Я узнал, что это слабо связано.Я могу включить только те файлы, которые мне нужны.Я также могу использовать Zend_Application для больших проектов.Его объектно-ориентированное проектирование является обязательным условием при разработке и обслуживании больших проектов.

Да, CI и CakePHP помогли мне развиваться быстрее, чем с простым PHP.Тем не менее, есть гораздо более мощные рамки.Я слышу и вижу хорошие вещи о симфонии.Есть еще немало.Я уверен, что другие укажут на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...