380 likes | 584 Views
Oracle APEX: Fortgeschrittene Techniken aus der Praxis => Design. Patrick Wolf – Denes Kubicek - Dietmar Aust 17.03.2008 – 19.03.2008. Agenda. Datenmodell Geschäftslogik Konfigdaten Parsing Schema Workspace Applikationsaufteilung Seitennummerierung/-gruppierung APEX Einstellungen
E N D
Oracle APEX: Fortgeschrittene Techniken aus der Praxis=> Design Patrick Wolf – Denes Kubicek - Dietmar Aust 17.03.2008 – 19.03.2008
Agenda • Datenmodell • Geschäftslogik • Konfigdaten • Parsing Schema • Workspace • Applikationsaufteilung • Seitennummerierung/-gruppierung • APEX Einstellungen • Teamentwicklung Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Zeit investieren! Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Datenmodell leben länger als Applikationen • Ist letztes Bollwerk für konsistente Daten Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell – Grafisch visualisieren • ERDs oder UML Diagramme • Farben verwenden • Logisch Gruppieren • Von Oben nach Unten • Hilft beim Denken • Leichterer Einstieg für neue Entwickler • Man diskutiert ganz anders Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Künstlicher Primary Key (mit Sequence) • In APEX maximal 2 Primary Key Attribute • Update auf natürlichen „Primary Key“ keine Auswirkungen • Eine Sequence reicht • Nachteil • Eventuell mehr Joins • Constraints können weniger überprüfen • Unique Keys verwenden! • Jede Tabelle hat meistens natürlichen Schlüssel! (Auftragsnr., Kundennr, Auftragsnr.+Position, …) • Wenige Ausnahmen (Logging Tabelle, ...) Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Foreign Keys verwenden! • Schaft Sicherheit und konsistente Daten • Nicht auf Applikation verlassen!!! • Performance schon lange kein Thema mehr • Foreign Key Spalten generell indizieren • Schneller beim joinen • Verhindert Table Locks • Konsistentes Namensschema überlegen • Keine Lookup Tabellen sparen! • Z.B.: für Aufzählungen (E-Mail, Fax, Tel, ...) Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell – Keine Lookup Tabellen sparen • Mehr Stellen zeigen Werte an als man denkt! • Zu viele Lookup Tabellen? • Generische Tabelle als Alternative • DOMAIN (z.B.: KOMMUNIKATION) • DOMAIN_VALUE (z.B.: TEL, FAX, E-MAIL, ...) Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell – Generische Werteliste Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell – Generische Werteliste • Vorteile • Eine generische Maske zum pflegen aller Werte • Keine Datenmodell Änderung notwendig • „Spart“ viele Tabellen • Nachteile • Weniger Aussagekraft von Foreign Key Constraints • FK kann nicht auf bestimmte DOMAIN überprüfen • CBO hat weniger Information Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Check Constraints verwenden! • Schaft Sicherheit und konsistente Daten • Nicht auf Applikation verlassen!!! • CBO hat mehr Informationen • NOT NULL Constraints verwenden • Gehört zum Analyse/Design Prozess Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Domänen überlegen • Vereinheitlichung der Datentypen • Z.B.: Spalte DESCRIPTION ist immer VARCHAR2(40) • Booleans • NUMBER(1) mit Constraint auf 0 (FALSE) und 1 (TRUE) • Normalerweise NOT NULL! • Gleiche Namensgebung – z.B.: IS_MANAGER, HAS_CHILDS • Verarbeitungsflag • NUMBER(1) mit Constraint auf NULL und 1 (TRUE) • Index erstellen -> Enthält nur Datensätze mit 1 • Historisierungsattribute • Kann automatisch generiert werden Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell • Konsistentes Namensschema überlegen • Tabellen Prefix (z.B.: NPT_T_) • Spalten Prefix • Foreign Key Benennung • Constraint Benennung (IX_, UK_, PK_, FK_, CK_, ...) • Spalten mit gleicher Bedeutung (DESCRIPTION, CODE, ...) • Tabellen und Spalten Kommentar verwenden • Immer mit Scripts ändern (Dev., Test, Produktion) Patrick Wolf – Denes Kubicek – Dietmar Aust
Datenmodell - Conclusio • Constraints, Constraints, Constraints!!! • Nicht auf Applikation verlassen • Letztes Bollwerk • Zeit investieren Patrick Wolf – Denes Kubicek – Dietmar Aust
Geschäftslogik • In die Applikation? • Direkt auf Tabellen inserten/updaten/löschen? • Was ist mit Überprüfungen? Patrick Wolf – Denes Kubicek – Dietmar Aust
Geschäftslogik - Objektkapselung • Package für jede Tabelle oder logische Tabelle/Tabellengruppe • Prozeduren • createObjektname • updateObjektname • deleteObjektname • validateSpalte/... • Eine Zentrale Stelle wenn es um die Erstellung oder Änderung des Objekts geht • Andere Objekte Initialisieren • Notification, ... • Kann Initial generiert werden • Hilft bei Datenmodell Änderungen – Eine Zentrale Stelle • Auch andere Programme können Code verwenden (Batchjobs, ...) -> eine Art von SOA ;-) Patrick Wolf – Denes Kubicek – Dietmar Aust
Geschäftslogik - Objektkapselung • Wie in APEX verwenden? • Eigene DML Prozess • Verlust von „Lost Update Detection“/Optimistic Looking • Viel Arbeit • View mit INSTEAD OF TRIGGER • Für APEX wie Tabelle • Keine Änderung am Standardverhalten • Siehe statements.sql Patrick Wolf – Denes Kubicek – Dietmar Aust
Geschäftslogik - Conclusio • Geschäftslogik raus aus dem UI !!! Patrick Wolf – Denes Kubicek – Dietmar Aust
Konfigdaten • Wiedereinspielbahre Scripts! • STORE Prozeduren • Siehe statements.sql Patrick Wolf – Denes Kubicek – Dietmar Aust
Parsing Schema • Verwenden Sie das Applikationsschema? Patrick Wolf – Denes Kubicek – Dietmar Aust
Parsing Schema • Gefahr bei SQL Injection • „Run User“ mit eingeschränkten Rechten verwenden • Z.B.: Kein DROP TABLE Recht • Mit Data Dictionary Scripts automatisch granten und Synonyms erstellen • Nachteil • Wizard sieht die Synonyme nicht • Workspace braucht auch Applikationsschema • Immer Applikationsschema auswählen • Applikationsschema hardcodiert • Alternative • „Run User“ Parsing Schema erst bei Deployment setzen Patrick Wolf – Denes Kubicek – Dietmar Aust
Workspace • Einen? Mehrere? • Abhängig von Berechtigungsstruktur (Entwickler, Power User , Abteilungen) • Tendiere zu Einem • Single Sign On zwischen Applikationen im Workspace • Über gleiche „Cookie Attributes“ in Authentification Scheme Patrick Wolf – Denes Kubicek – Dietmar Aust
Applikationsaufteilung • Bei kleinen Applikationen nicht sinnvoll • Bei größeren überlegenswert • Vorteile • Unabhängige Release Zyklen • Besser handhabbar • Übersichtlicher • Leichtere Teamentwicklung • Mögliche Nachteile • Weniger integriert • Unterschiedliche Templates • Uneinheitliche Navigationsleisten • Übergreifende Navigation komplizierter • Weniger Synergie (gleiche Seiten, Lovs, ...) Patrick Wolf – Denes Kubicek – Dietmar Aust
Applikationsaufteilung • Zentrale Master Applikation • Login • Allgemeine Seiten (Benutzerverwaltung, ...) • Navigationsleisten • Lovs • ... • Spezifische Applikationen • Subscription verwenden Patrick Wolf – Denes Kubicek – Dietmar Aust
Seitennummerierung • Fortlaufend? APEX weiß es am besten? • Nur bei kleine Applikationen • APEX Seitennummern sind nicht wirklich limitiert! • Es gibt immer zusammengehörige Seiten • Übersichtsbericht mit Suche • Detail Formular • Vielleicht noch weiteres Detail Formular • 50 oder 100 Schritte pro zusammengehörige Seiten • 1.000 oder 10.000 Schritte pro Seitengruppe Patrick Wolf – Denes Kubicek – Dietmar Aust
Seitengruppen • Wer kennt Sie? Verwendet Sie? • Gutes Mittel um Applikation zu Strukturieren • Admin Bereich • Öffentlicher Bereich • Shop • ... • Verschiedene Darstellungsmöglichkeiten • Hilft Page Flow Diagram von ApexLib • Zuordnen über Seiteneigentschaften Patrick Wolf – Denes Kubicek – Dietmar Aust
APEX Einstellungen • Application Builder Defaults • Developer Preferences • UI Interface Defaults • Defaults beim erstellen von Tabellen/Views • Titel, Labels, Templates, Format Masken • Applikationsübergreifend Patrick Wolf – Denes Kubicek – Dietmar Aust
APEX Einstellungen • Default Templates für Komponenten und Regionen • Shared Components\Themes\Edit Theme • Ein wenig versteckt Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Codierrichtlinien • Jeder entwickelt anders • Emotionales Gebiet! • Einheitliche Namensgebung • Filenamen • Variablen • Parameter • Konstanten • Felder • Einheitliche Formatierung • Gross-/Kleinschreibung • Klammern • Einrückung • Leerzeichen • PL/SQL Aufrufe mit Non-Positional Syntax/Parameter Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Codierrichtlinien • Einheitliche Vorgehensweise • Gleiche Patterns (z.B.: Geschäftslogik, APEX Seiten, ...) • Einheitliches Layout • Labels, Tabs, Breadcrums, ... • Feldtypen vereinheitlichen (Datum, Geldbeträge, …) • Für Oracle APEX und PL/SQL und SQL • Schriftlich!!! • Reviews durchführen Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Versionsverwaltung • Ist ein MUSS!!! • Auch bei 1 Mann Entwicklung! • Schnell etwas überschrieben/gelöscht • Historien Vergleich • Tools • CVS + TortoiseCVS • SVN + TortoiseSVN Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Versionsverwaltung • Alle Projekt relevanten Dateien • Create Table Scripts • Konfigdaten • Packages • Dokumente • ... • APEX Applikations Export • Manueller Export am Abend (APEX Builder oder SQL Developer) • Automatisiert mit apex\utilities\oracle\apex\APEXExport.class und APEXSplitter.class • Details siehe http://jes.blogs.shellprompt.net/2006/12/12/backing-up-your-applications/ Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Ticketsystem • Nachvollziehbar • Strukturiert • Viele Tools • JIRA • Bugzilla • ... Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Gleichzeitige Entwicklung • Versionsverwaltung hilft dabei • Locks • Merge • Nicht für APEX Export geeignet • APEX • Page Locks verwenden • Nicht alles geschützt (Shared Components) • In 3.1 ein paar Bugs korrigiert • Themengebiete für Entwickler festlegen • Eine Zentrale Entwicklungsinstanz Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Gleichzeitige Entwicklung • Wenn was schief geht... • Seiten Export mit „As of xx min“ verwenden • Komplett Import beeinträchtigt andere Entwickler • DBA soll höheres Zeitfenster einstellen!!! Patrick Wolf – Denes Kubicek – Dietmar Aust
Teamentwicklung – Conclusio • Codierrichtlinien • Versionsverwaltung • Ticketsystem • Regelmäßige Exports • Page Locks verwenden • Einzel Seiten Export mit „As of“ Patrick Wolf – Denes Kubicek – Dietmar Aust