Skip to topic | Skip to bottom
Home
Zope.ZopeTwoZopeThreer1.9 - 28 Feb 2007 - 14:22 - FrankBurkhardt [Zum Ende]

Start of topic | Direkt zum Menü

Zope2 und Zope3 im Vergleich

Einige Dinge, die in Zope2 selbst programmiert bzw. durch Produkte nachinstalliert werden mussten, sind im Zope3 bereits enthalten.

Allgemeines

TTF-Development gibt's ab Zope3 nicht mehr

Unter Zope2 konnte man umfangreich im Browser entwickeln. Dazu mussten lediglich Python-Skripts per ZmI abgelegt/bearbeitet werden. Auf diese Weise konnten im laufenden Betrieb Änderungen an der Serverlogik durchgeführt werden. Das geht unter Zope3 nicht mehr.

Eng damit verbunden ist eine bessere Trennung von Code und Daten. In Zope3 liegt in der ZodB kein Programmecode mehr - nur noch Objekte. Jeglicher Programmcode ist im Filesystem angesiedelt - als Python-Paket

Das ZmI unter Zope2 und Zope3

Unter Zope2 war das ZmI eine Welt, alle anderen Seiten waren eine andere. Dieses Prinzip ist mit Zope3 hinfällig. Das ZmI ist in Zope3 nichts weiter als miteinander verlinkte BrowserViews, die an den ContentObjects hängen und die Bezeichnung ZmI damit eigentlich hinfällig. Man kann das Design der angezeigten BrowserViews zentral steuern (Stichwort SkiNs).

Man sollte bedenken, dass die Dinge, die man unter Zope2 per ZmI gemacht hat, unter Zope3 ganz normale Python-Methoden sind - es gibt keinen Grund mehr zwischen ZmI und dem Rest des Servers zu unterscheiden.

Erzeugen von Content-Klassen sammt Formularen

In Zope2 wurde ein Produkt namens Archetypes benutzt, um neue Content-Objektklassen zu generieren. Solche Objektklassen benötigt man z.B. für Contentmanagement - ein Artikel in einem Onlinemagazin ist z.B. eine Objektklasse mit den Eigenschaften Titel , Text , Liste der Bilder , Autor , ...

Ab Zope3 geht das auch mit Bordmitteln (siehe ContentObject ).

Link zu CMF-Beispielen: http://www.zope.org/Products/CMF/docs/PortalDesigns.txt/view

Content in der ZodB und ausserhalb

Zumindest der RootFolder liegt immer in der ZodB. Wenn in der ZodB nach Objekten gesucht, hangelt sich üblicherweise der Traverser die ConTainer der ZodB entlang, bis der Pfad in der UrL abgearbeitet ist. Allerdings kann man als Entwickler den TraVerser? beeinflussen und so z.B. als Unterobjekte eines "fake-Containers" Objekte zurückliefern die beispielsweise SQL-Abfragen repräsentieren. Es ist auf diese Weise kein Problem, sämmtliche Inhalte der ZopeInstance in relationalen Datenbanken vorzuhalten. Auch können externe daten auf diese Weise leicht indiziert werden (z.B. per CataLog).

Produkte vs. Packages

Unter Zope2 gab es das Konzept der Produkte - vereinfachte gesagt: Zope-Module. unter Zope3 funktioniert das anders. Zope3-Module sind einfache Python-Packages. Sobald also ein Verzeichnis im Python-Suchpfad eine Datei namens __init__.py enthält, kann man dieses Package sowohl unter Python als auch unter Zope3 benutzen.

Beschreibungen von Objekten durch InterFaces

Objekte, die InterFaces implementieren besitzen damit eine sog. formalisierte API . Wo es in Zope2 oft nötig ist, sich in anderem Code umzusehen, um zu wissen, wie man Objekt X benutzt, braucht man sich bei Zope3 nur das entsprechende InterFace anzuschauen.

Komponenten mit Registrierungspflicht

Zope3 baut auf eine Komponenteninfrastruktur, wobei Vererbungsbeziehungen zwischen Klassen an Bedeutung verlieren. Über InterFaces geben Klassen zu erkennen, dass sie bestimmte Eigenschaften haben. Will man weitere Klassen mit ähnlichen Eigenschaften erzeugen, so müssen diese anderen Klassen einfach die selben InterFaces "Implementieren" - es ist keine Ableitung von ähnlichen Objekten bzw. isInstance() -Abfragen zum Testen von Objekten nötig.

Da Zope3 nur aus Python-Klassen besteht, ist theoretisch jede Klasse sofort durch Skripte nutzbar. Damit man auch mal etwas ausprobieren kann, ohne dass das den laufenden Betrieb beeinflusst, muss man jegliche Klassen, die eingesetzt werden sollen, erst registrieren.

Das geschieht entweder per ZcmL (z.B. für ein ContentObject) oder auch per SitE-Manager (z.B. bei einem UtilitY).

Trennung von Konfiguration und Code

Mit der Einführung der Konfigurationssprache ZcmL wurde die Konfiguration (z.B. das Setzen von Zugriffsberechtigungen) aus dem Python-Code herrausgenommen. Ziel war, dass Zope-Komponenten leichter zu konfigurieren sind. In Zope3 kann man dadurch die Klassen (-> Komponenten) in Python programmieren und die ganze Konfiguration per ZcmL leicht zugänglich machen, wodurch für das Anpassen von Berechtigungen, etc. keine Änderungen am Code mehr nötig sind.

Umstieg von Zope2 auf Zope3

Man kann in Zope3 keinen Code aus Zope2 weiterverwenden, der über reine Python-Klassen hinausgeht.

Spezielles

Pluggable Authentication Utility

Unter Zope3 existiert ein Plugin-System ( PaU ), um mit Anmeldedaten von Benutzern umzugehen. Unter Zope2 existierte etwas ähnliches, das jedoch weniger flexibel ist.

Neuigkeiten in Zope3.3

Auf folgender Seite sind die Änderungen zwischen Zope3.2 und Zope3.3 beschrieben:

http://kpug.zwiki.org/WhatIsNewInZope33
[Zurück zum Start]


Aktuelle Wiki-Seite: Zope > ZopeTwoZopeThree

[Zurück zum Start]

Alle Inhalte dieses Web dürfen frei kopiert und verändert werden.