Понимание внутренних органов Zope глазами Джанго - PullRequest
7 голосов
/ 10 ноября 2009

Я новичок в zope и ранее работал над Django около 2,5 лет. Поэтому, когда я впервые запрыгнул в Zope (v2) (только потому, что моя новая компания использует его уже 7 лет), я столкнулся с этими вопросами. Пожалуйста, помогите мне понять их.

  1. Какова "настоящая" цель zodb как такового? Я знаю, что он делает, но скажите мне одну замечательную вещь, которую делает zodb, и фреймворк, такой как Django (у которого нет zodb).

    Обновление: на основе ответов, Zodb заменяет потребность в ORM. Вы можете напрямую хранить объект внутри БД (сам zodb).

  2. Говорят, что одной из главных особенностей Zope является философия TTW (через Интернет или разработка с использованием ZMI). Но я (и любой разработчик) предпочитаю разработку на основе файловой системы (используя контроль версий, используя Eclipse, используя любой любимый инструмент за пределами Zope). Тогда где же на самом деле используется этот TTW?

  3. Это большой. Что «ДОПОЛНИТЕЛЬНАЯ штука» делает выигрыш Приобретения Zope по сравнению с наследованием Python / Django.

  4. Это действительно хороший шаг, чтобы прийти к Zope из Джанго?

  5. Любой сайт, как djangosnippets.org для Zope (v2)?

Ответы [ 6 ]

15 голосов
/ 10 ноября 2009

Перво-наперво: текущие версии zope2 также включают в себя все zope3. И если вы посмотрите на современные приложения zope2, такие как Plone, то увидите, что в них много «zope 3» (теперь называется «набор инструментов zope», ZTK) под капотом.

Настоящая цель ZODB: это одна из немногих объектных баз данных (в отличие от реляционных баз данных SQL), которая находит широкое применение. Вы можете просто хранить все свои объекты Python без необходимости использовать объектно-реляционный маппер. Нет "выберите * из XYZ" под капотом. И добавление нового атрибута к объекту zodb «просто» сохраняет это изменение. Роскошный! Особенно удобно, когда ваши данные не могут быть легко сопоставлены со строгой реляционной базой данных. Если вы можете отобразить это легко: просто используйте такую ​​базу данных, я несколько раз использовал sqlalchemy в проектах zope.

TTW: мы вернулись с этого. По крайней мере, способ TTW на zope2 действительно имеет все недостатки, которых вы боитесь. Нет управления версиями, никаких внешних инструментов и т. Д. Plone экспериментирует (Google для «ловкости») с красивым явным zope 3 способа разработки TTW, которые все еще могут быть сопоставлены с файловой системой.

TTW: zodb позволяет легко и дешево хранить всевозможные настройки конфигурации в базе данных, так что вы обычно можете многое настраивать через браузер. Однако это не считается типичной разработкой TTW.

Приобретение: удобный трюк, хотя он приводит к огромному загрязнению пространства имен. Обоюдоострый меч. В большинстве случаев мы стараемся обходиться без улучшения отладки и обслуживания. Получение происходит внутри «графа объектов», так что подумайте «структура папок внутри сайта zope». Вызов «contact_form» тремя папками вниз может по-прежнему найти «contact_form» в корне сайта, если он не найден где-то посередине. Обоюдоострый меч!

(И обычное объектно-ориентированное наследование Python происходит повсеместно).

Переход от django к zope: действительно хорошая идея для определенных проблем и бессмысленная для других проблем :-) Довольно много компаний zope2 / plone фактически выполнили несколько проектов django для конкретных проектов, обычно таких, которые имеют 99% процентов их содержание в относительно простой базе данных SQL. Если вы больше увлекаетесь управлением контентом, zope (и plone), вероятно, лучше.

Дополнительный совет: не фокусируйтесь только на zope2. «Компонентная архитектура» Zope3 обладает множеством функциональных возможностей для создания больших приложений (в том числе не веб-приложений). Посмотрите на grok (например, http://grok.zope.org) для дружественного упакованного zope. Архитектура чистого компонента также может использоваться в проектах django.

9 голосов
/ 14 ноября 2009

На ZODB:

Еще один способ спросить: «Какова реальная цель ZODB?» это спросить: «Почему ZODB был изначально создан?»

Ответ на этот вопрос заключается в том, что проект был начат очень рано, примерно в 1996 году. Это было до появления MySQL или PostgreSQL, когда все еще широко использовалась база данных miniSQL (бесплатное, но не бесплатное программное обеспечение), или базы данных больших денег, такие как Oracle. Python предоставил модуль pickle для сериализации объектов Python на диск - но сериализация находится на более низком уровне, она не позволяет использовать такие функции, как транзакции, параллельные записи и репликация. Это то, что обеспечивает ZODB.

Он все еще используется сегодня в Zope, потому что работает хорошо. Если у вас нет существующего набора навыков в реальных базах данных, легче научиться использовать ZODB, чем реляционную базу данных. Это также более простые варианты использования, например, если у вас есть сценарий командной строки, который должен хранить некоторую информацию о конфигурации, использование реляционной базы данных означает необходимость запуска сервера базы данных, чтобы просто сохранить немного конфигурации. Вы можете использовать файл конфигурации, но ZODB также работает довольно хорошо, потому что это встраиваемая база данных. Это означает, что база данных работает в том же процессе, что и остальная часть кода Python.

Стоит также отметить, что API, используемый для хранения объектов внутри контейнеров, отличается от Zope 2 и Zope 3. В Zope 2 контейнеры хранятся как атрибуты:

 root.mycontainer.myattr

В Zope 3 они используют тот же интерфейс, что и стандартный словарь Python:

  root['mycontainer']myattr

Это еще одна причина, по которой легче научиться использовать ZODB, чем Django ORM, поскольку Django имеет собственный интерфейс для своего ORM, который отличается от существующих интерфейсов Python.

Через Интернет (TTW):

Опять же, понимание причины TTW восходит к моменту разработки Zope. Несмотря на то, что глупо расставаться с хорошо известными инструментами для разработчиков, такими как Subversion или Mercurial, Zope был разработан в конце 90-х годов, когда единственной бесплатной системой контроля версий была CVS. У Zope 2 были свои собственные простые возможности контроля версий, и они были так же хороши, как и CVS (то есть «они были ограничены и отстойны»). Рабочие станции UNIX тогда стоили намного больше денег и имели гораздо меньше ресурсов, поэтому системные администраторы были гораздо более осторожны и осторожны в управлении серверами. TTW позволил людям, которые обычно не могли загружать код на сервер с помощью администратора sysadmin, сделать это.

В текстовых редакторах emacs и vi поддерживают ftp-режимы, а Zope 2 может прослушивать порт FTP. Это позволило бы вам разработать код так, чтобы он хранился в ZODB (редактируемый TTW), но обычно этот код редактировали с использованием emacs или vi.

Сегодня в Zope TTW более редко используется или рекламируется, так как больше не имеет смысла это делать. Дисковое пространство дешево, серверы (относительно) дешевы, и есть много инструментов разработчика, которые ожидают взаимодействия со стандартной файловой системой.

Приобретение:

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

Переезд из Джанго в Зопе:

Работа над Zope 3 началась в 2001 году. Это устранило множество проблем с Zope 2. Сообщество Zope свидетельствует о том, что Zope 2 по-прежнему активно и в хорошем состоянии, но вряд ли является современным. Zope 2 действительно интересно изучать только с исторической точки зрения.

Zope 3 в конечном итоге развивался в нескольких разных направлениях, и поэтому современные воплощения Zope лучше всего выражены в форме Grok, BFG или Bobo.

Grok ближе всего к Zope 3, и, как таковая, является довольно большой платформой - иногда она может быть довольно подавляющей при копании в ее кодовой базе. Однако, так же как Django или любой другой полнофункциональный фреймворк, вам не нужно использовать каждую часть Grok, может быть довольно легко изучить основы и создавать веб-приложения с его помощью. Это соглашение по конфигурации больше не имеет аналогов, и его представления на основе классов дают гораздо более жесткую и, возможно, более чистую базу кода, чем веб-приложение Django. Система маршрутизации URL-адресов чрезвычайно гибкая, но, возможно, чрезмерно сложная.

BFG - это фреймворк "плати только за то, что ты ешь", написанный давним разработчиком Zope Крисом Макдоноу. Как таковой, он ближе к Pylons по духу, где включены только части, которые считаются основными или существенными для каркаса. Это также очень хорошо играет с WSGI. Он использует только несколько основных пакетов Zope.

Бобо - это «микро-фреймворк». Это просто способ маршрутизации URL-адресов и обслуживания приложения. Он не использует никаких пакетов Zope, поэтому не относится строго к семейству веб-фреймворков Zope. Но это было написано создателем Zope, Джимом Фултоном, который первоначально назвал издательскую часть Zope, "Бобо". Оригинальный Bobo, написанный в начале 90-х, отображал URL-адреса на пакеты и модули, поэтому, если ваш исходный код был выложен как:

mypackage.mymodule.MyClass

У вас может быть такой URL, как:

/mypackage/mymodule/MyClass

Что было очень негибко и было заменено URL Traversel в Zope 2, что довольно сложно. Бобо использует Маршруты, так что он является средним звеном между абсолютно простым разрешением URL и сложным разрешением URL - примерно такой же сложности, как и механизм разрешения URL в Django.

6 голосов
/ 11 ноября 2009

Очень хорошая справка по ZODB - это Руководство программиста ZODB / ZEO . ZODB - это не ORM. Это настоящая объектная база данных. Объекты Python хранятся внутри базы данных прозрачно, не беспокоясь о том, как преобразовать их в представление, подходящее для базы данных. Любой маринованный объект Python можно сохранить внутри ZODB. Реляционные базы данных подходят для большого количества плоских данных (например, записей сотрудников), тогда как ZODB лучше всего подходит для иерархических данных (обычно встречающихся в веб-приложениях). Я лично использую Zope 3 для своих приложений. Я никогда не делал TTW типа работы. Лучшая часть использования ZODB заключалась в том, что мне никогда не приходилось беспокоиться о том, как я собираюсь сохранять данные и как все изменится, когда я обновлю свое программное обеспечение с одной версии до следующей. Например, если я добавляю новый атрибут в класс Python, все, что мне нужно сделать, это предоставить значение по умолчанию в качестве атрибута класса. Затем он автоматически становится доступным для всех объектов, созданных в предыдущей версии того же класса. Удаление атрибута - это простая операция del для существующих объектов. Кстати, ZODB может использоваться независимо в любом приложении Python и не сочетается только с платформой ZOPE. Мне нравится тот факт, что мне не нужно беспокоиться о мелочах SQL во время работы над приложениями Python, спасибо ZODB. И, конечно же, если вам нужен сервер базы данных, чтобы вы могли запускать несколько копий своего приложения с одним и тем же сервером, ZEO придет вам на помощь поверх ZODB.

Zope начал с идеи быть объектной средой публикации. С этой точки зрения сопоставление URL непосредственно с иерархией объектов в ZODB было великолепным. URL-адреса просто отражают иерархию объектов. Теперь, когда рассматривается вопрос об URL, всегда есть интерфейс отладки Роттердама для помощи. Что касается разработки, я сохраняю флаги разработки в конфигурации zope и смотрю содержимое ZODB через интерфейс Роттердама. Роттердамская оболочка обеспечивает отличный способ анализа объектов Python, хранящихся в ZODB, и определения URL-адресов гораздо более интерактивным. Более того, для основных контейнеров внутри моего ZODB я регистрирую их как постоянные утилиты в менеджере сайтов (сайты Zope 3 и менеджеры сайтов). В любом месте моего кода, когда мне нужен доступ к таким контейнерам, все, что я делаю, это getUtility (IMyContainerType). Мне даже не нужно помнить подробное расположение этих контейнеров внутри базы кода. Однажды они регистрируются у менеджера сайта и доступны в любом месте внутри кодовой базы через вызовы getUtility ().И URL-адреса также поддерживают пространства имен. Например, используя пространство имен ++ skin ++, вы можете в любое время изменить обложку вашего веб-приложения. Используя пространство имен ++ language ++, вы можете в любое время изменить предпочитаемый язык вашего пользовательского интерфейса. Используя пространство имен ++ attribute ++, вы можете получить доступ к отдельным атрибутам объекта. URL-адреса просто гораздо более мощные и гораздо более настраиваемые. И вы можете написать адаптеры обхода, определить свои собственные пространства имен, чтобы расширить возможности ваших URL-адресов. Чтобы привести пример, все страницы, которые напрямую доступны через веб-интерфейс, являются частью моей темы по умолчанию. В то время как все страницы, которые вызываются через фоновые вызовы AJAX, находятся под другой оболочкой. Таким образом, можно реализовать разные способы аутентификации механизмов в разных оболочках. В основной оболочке один перенаправляется на другую страницу входа в случае сбоя аутентификации. Для страниц AJAX можно просто получить ошибку HTTP. Это может быть сделано централизованно. У объектов Zope 3 есть интерфейсы, и один вид может быть определен для нескольких интерфейсов. Везде, где у вас есть объект, который поддерживает данный интерфейс, все связанные представления становятся автоматически доступными, и все такие URL-адреса автоматически становятся действительными. Если вы думаете об этом, это гораздо более мощный, чем один файл Python или XML-файл, где URL-адреса жестко закодированы. Я не очень много знаю о DJango и J2EE, поэтому не могу сказать, имеют ли они эквивалентные возможности.

6 голосов
/ 10 ноября 2009

Я отвечаю без особого опыта на оба вопроса, но у меня была возможность манипулировать обоими, поэтому я могу высказать вам свое мнение по некоторым из ваших вопросов.

1) Что такое "настоящий"цель зодба как такового?Это значит, что я знаю, что он делает, но скажите мне одну замечательную вещь, которую делает zodb, и фреймворк, такой как django (у которого нет zodb), пропускает

Загрузка распределения через ZEO и поиск через ZCatalog.Джанго очень низкий уровень с этой точки зрения.Чтобы добиться того же, вам придется переопределить множество колес, треугольных.Вскоре я понял кое-что: не связывайтесь с проблемами с базами данных низкого уровня.Вы облажаетесь.Это банка червей, Дюны размером .

Так почему же выбрать Django ORM?Вам также следует подумать, если YAGNI .django easy и самодостаточен, документация является премиальной, и когда (если) ваш сайт вырастет так сильно, вы переключитесь на более качественный ORM (или на чистый OODB, в случае ZODB)позже.

2) Говорят, что одной из убойных функций zope является философия TTW (через Интернет или разработка с использованием ZMI).Но я (и любой разработчик) предпочитаю разработку на основе файловой системы (используя контроль версий, используя Eclipse, используя любой любимый инструмент за пределами Zope).Тогда где же на самом деле используется этот TTW?

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

4) Действительно ли это хороший ход для работы над Zope, от Django?

Zope 3 очень модульный, поэтому вы можете использовать многие его компоненты из django.Я бы посоветовал против этого, хотя.Вы можете, конечно, но то, что я нашел наиболее проблематичным, это отсутствие помощи.Не так много людей используют компоненты zope и django одновременно.Рано или поздно у вас возникнет проблема, и Google не поможет.В этот момент вы поймете, что если ваша жизнь была видеоигрой, вы определенно играете в нее на уровне сложности (возможно, экстремальном, если вам придется засунуть нос в код zope).

3 голосов
/ 10 ноября 2009

ZODB - это база данных в стиле OO, которая не нуждается в определении схемы. Вы можете просто создавать (почти) все виды объектов и сохранять их.

TTW иногда раздражает, но вы можете смонтировать дерево объектов ZOPE с помощью webdav. Затем вы можете редактировать шаблоны и скрипты, используя ваш любимый редактор.

ZOPE особенно мощен для создания CMS-подобных систем, ИМХО, там он по-прежнему не имеет себе равных - вам придется многое сделать, чтобы он одинаково хорошо работал в Django.

И благодаря TTW у не-разработчиков, таких как дизайнеры, есть хорошие шансы на разработку, например. шаблоны и CSS без необходимости взаимодействия с разработчиком.

1 голос
/ 14 ноября 2009

+ 1 на ответ Пшеницы выше: «Zope 2 действительно интересна только для изучения с исторической точки зрения». Я сделал Zope dev для большого сайта в течение пары лет, 50% zope 2, 50% zope 3. Даже тогда (это было 2 года назад) мы работали над переносом всего из zope 2. Если у вас уже нет много инвестировал в существующий проект Zope 2, нет причин использовать его; там просто не так много будущего. И если у вас действительно есть большой существующий проект zope 2, я бы посоветовал взглянуть на продукт под названием Five (шутка: 2 + 3 = 5), который нацелен на

позволяет интегрировать Zope 3 технологии в Zope 2. Среди другие, это позволяет использовать Zope 3 интерфейсы, конфигурация на основе ZCML, адаптеры, страницы браузера (в том числе скины, слои и ресурсы), Автоматическое добавление и редактирование форм на основе схемы, события объекта, а также Каталоги сообщений Zope 3 в стиле i18n.

Когда все сказано и сделано, Zope 3 очень сильно отличается от 2, и ИМХО, гораздо лучше (хотя и более сложный). TTW является необязательным и не рекомендуется в большинстве случаев. Скрытое приобретение прошло.

Похоже, что люди здесь рассказали, почему вы можете использовать ZODB, поэтому я подумал, что упомяну еще одну вещь о Zope 3 (или Zope 2 с использованием Five), и это хорошо. Zope имеет очень мощную систему для соединения различных прикладных компонентов, которая называется Архитектура компонентов Zope (ZCA). Это позволяет вам писать компоненты, которые являются более или менее автономными и могут использоваться повторно, и которые могут быть объединены стандартным способом. Сейчас я в основном занимаюсь разработкой Django, и иногда мне не хватает ZCA. В Django возможность написания повторно используемых компонентов ограничена и является специальной. Но, как говорит Рейноут, zope.component (как и большинство пакетов zope, включая ZODB) работает вне платформы zope и может использоваться в проекте Django.

Тем не менее, у ZCA есть свои недостатки, одним из которых является утомительный процесс регистрации ваших компонентов в файлах XML; это всегда чувствовало себя немного Java-esqe для меня. Одна из причин, по которой мне действительно нравится Grok http://grok.zope.org/, заключается в том, что он находится поверх zope.component и выполняет большую часть этой тяжелой работы за вас.

Итак, суть: Zope 2 в основном тупик. Если ваш работодатель поддается этому, начните смотреть на Zope 3 или хотя бы Five. Я думаю, вы обнаружите, что у Zope 3 есть крутая кривая обучения по сравнению с Django, так что, возможно, было бы неплохо сделать это через Grok, который сглаживает многие грубые грани Zope 3. Но я думаю, что для действительно большого или сложного веб-приложения с большим количеством движущихся частей я бы выбрал Zope вместо Django (и я говорю это как человек, который действительно любит Django). Для небольших проектов Django, вероятно, будет быстрее. Количественно определить «большой» и «маленький» в этом контексте сложно, и, вероятно, потребуется еще несколько тысяч слов. Если вы действительно заинтересованы в Zope 3, то, безусловно, стоит начать с книги Филиппа фон Вайтерсхаузена.

...