Каковы различия в реальном мире между Zend Framework и Django?
Я давно использую PHP-пользователя, когда речь заходит о веб-приложениях, и я очень люблю его. Тем не менее, у меня есть один полу-большой проект, обслуживание/расширяемость которого достигло конца жизненного цикла. Я взвешивал разные фреймворки PHP (когда проект не возникал), так как это способ пойти на этот проект, и я пришел к выводу, что опция ebst будет делать это с помощью Zend Framework.
- Symfony казался сложным (мне не нравится настраивать модель базы данных как
- CakePHP казался мутным
- Igniter Мне понравилось сначала, но тогда мне показалось, что это больше похоже на Zend с меньшими возможностями и без Zend.
- Zend Мне нравится система, в которой я могу использовать только то, что мне нравится, и не привязана к конкретной структуре каталогов, и, конечно же, Zend стоит за ней. Производительность - это то, что потенциально беспокоит меня.
Теперь, после этого небольшого обоснования выбора Zend, есть несколько вещей, которые я вижу в качестве разрыва сделки при выборе рамки.
- Я не использовал ORM в прошлом, потому что я более чем удобен для написания SQL напрямую, поэтому мне все еще нужно убедиться, что вы используете ORM
- Не слишком большая абстракция происходит от кишок
- Гибкая структура каталогов
Пока этот проект будет написан заново, я также могу написать его в Python/Django, так как я хорошо знаком с Python, но не с Django. Итак, я хотел бы знать, есть ли кто-то, кто работал с платформами Zend Framework и Django, и может ли он выделить несколько ключевых различий?
Я также должен сказать, что этот проект выполнен как стандартный проект сайта/администратора. То есть, это в основном два сайта в одном. Один для интерфейсов и пользователей, другой для администрирования данных в бэкэнд. Я должен и буду строить бэкэнд самостоятельно, некоторые методы строительства будут прохладными, но полные автоматические строительные леса так же хороши, как ничего в этом случае.
Я по-прежнему не совсем уверен, как один из них подходит для создания в основном двух приложений в структуре каталогов, что должно быть, одного приложения. Вы просто делаете два отдельных приложения и полагаетесь на схему URL-адресов оттуда, чтобы отделить их? www.example.com и все /* - одно приложение, а www.example.com/admin/* - второе приложение.
Извините за длинный вопрос (ы), но, как вы можете видеть - все в значительной степени связано с одной проблемой - мне нужно начать проект заново, он уже установил базу данных + данные, которые я могу переделать, но хотел бы сохранить это вид работы минимум.
Хорошо, спасибо всем - похоже, я попытаюсь реализовать этот материал с Zend, дает мне большую гибкость из пакета (я делал тесты с обоими), и мы посмотрим, как это происходит.
Ответы
Ответ 1
Zend не содержит реального ORM. Он предоставляет некоторые вспомогательные классы, но вы в основном сами по себе в моделировании своей базы данных и написании собственных SQL-запросов. Таким образом, у вас будет полная свобода. Как говорит Дереш, Zend является модульным, поэтому вы можете выбрать и выбрать нужные части.
Лично я использую Zend вместе с DB_DataObjects из PEAR, как и ORM. Он может автоматически генерировать ваш код скелета. Это очень простое решение для обработки простых запросов, но я всегда могу написать собственный SQL, если это необходимо.
Что касается разделения двух администраторов и интерфейсов, я бы предложил разместить их в разных доменах, например: admin.yoursite.com(backend) и www.yoursite.com(frontend). Возможно, вы можете работать с ними, имея их оба с одним URL-адресом, но на самом деле это не прецедент, поддерживаемый Django или Zend.
Ответ 2
Ну, Django более полноэкранный, чем Zend. Это больше похоже на symfony, чем на Zend.
Django может преобразовать вашу базу данных в классы ORM. и имеет инструмент cli, который помогает вам делать вещи (генераторы и генераторы моделей, скелет проекта и т.д.).
Zend больше представляет собой компонентную структуру. он имеет собственную реализацию MVC и ORM, но вам нужно написать этот материал в одиночку. Его подход заключается в том, чтобы использовать только те вещи, которые вам нужны, не навязывая какую-либо структуру каталогов.
В вашем случае Django будет иметь некоторые преимущества из-за своего великолепного модуля генератор-администратора, а сам Django довольно быстрый (быстрее, чем большинство фреймворков PHP).
Я лично использую symfony с картой Zend для некоторых вещей, которые мне нужны (Mail, OpenID, поиск Lucene), но немного поиграли с Django, и мне это нравится.
Ответ 3
Я не настолько опытен с Django, но из того, что я читал об этом, похоже, это не то, что вы ищете (слишком много "абстракции от кишок" ).
Zend Framework не предоставляет вам ORM. Он предоставляет вам некоторые инструменты, которые могут помочь в ремонтопригодности вашего кода (например, гораздо проще сделать $user- > save() в объекте Zend_Db_Table_Row, а затем вручную ввести эквивалентную строку SQL).
Если вам удобнее делать SQL, это абсолютно здорово, и Zend копает это... просто остерегайтесь того, что на маршрутизаторе могут возникнуть проблемы с обслуживанием. Я бы предложил перейти с подходом "именованного запроса", где вы храните свои запросы во внешнем ресурсе и загружаете их "по требованию".
Zend имеет очень гибкую структуру каталогов... рекомендуемый способ облегчает работу.
Вы можете легко тянуть свои URL-адреса раздела администратора, используя модули и маршрутизацию.... его очень распространенный вариант использования в Zend.
В самом начале, Zend - это "структура представления". Это то, чем он превосходит. Это дает вам чистый способ организации презентации (экранов), отображаемой вашим пользователям, и помогает в обслуживании.
Это не делает для вас многого с точки зрения данных. Это зависит от вас, и, вероятно, это 90% работы, которая должна быть выполнена, чтобы стать "поддерживаемой".
Цель состоит в том, что ваш бизнес-логика и материал для доступа к данным должны функционировать в любой "инфраструктуре" и даже без веб-сервера! В противном случае вы просто перемещаете свой бесполезный беспорядок из всего, что у вас есть, для Zend.
Кроме того, я бы не стал заниматься производительностью... mosy вещи могут быть исправлены с хорошей стратегией кэширования.
Ответ 4
Я не могу сравнивать Zend и Django, но могу сказать, что вполне возможно, что приложение "admin" Django запускается в другом домене (виртуальный именованный сервер), и вам не нужно дублировать код, Вы просто создаете приложение Django как обычно, но добавляете приложение администратора и URL-адрес на другом виртуальном сервере, который имеет общий сервер/кластер баз данных.
У приложения Django admin есть ограничения, но он очень эффективен для чего-то, что почти бесплатное.
Наконец, когда я впервые начал Django, у меня было много презрения к ORM вообще, но я принимаю их сейчас как полезный инструмент в панели инструментов.