Added convinience function getField()
[AOOS.git] / Docs / overview.tex
blob6332ae01248ccde3622b46c9910c828e5f2d4bd8
1 \documentclass[a4paper,oneside]{memoir}
3 \usepackage[utf8]{inputenc}
4 \usepackage[danish]{babel}
5 \usepackage{graphicx}
7 \title{AOOS - Development notes}
8 \author{Sebastian Deisting Skejø}
10 \newcommand{\AOOS}{AOOS}
11 \newcommand{\AOOSl}{Agile Object-Oriented System}
12 \newcommand{\AOOSCore}{AOOSCore}
13 \newcommand{\AOOSModule}{AOOSModule}
15 \newcommand{\BUILTINS}{Indbyggede moduler}
16 \newcommand{\LOADABLES}{Egne moduler}
17 \newcommand{\bUILTINS}{indbyggede moduler}
18 \newcommand{\lOADABLES}{egne moduler}
20 \begin{document}
21 \maketitle
22 \tableofcontents
23 \chapter{Agile Object-Oriented System}
24 \AOOS(\emph{\AOOSl}) er et system skrevet med det formål at give webapplikationer skrevet i PHP høj modularitet.
25 Systemet bygger på en filosofi om moduler kun skal gøre det absolut mest nødvendige for at være funktionelle og at de skal kunne genbruges mange steder.
26 I praksis betyder det at mange mindre opgaver er delt ud i moduler for sig, fx vil ting som smilies blive parset i et modul for sig som andre moduler, fx et forum-modul, så kan bruge.
27 Arbejdet med \AOOS begyndte i foråret 2008.
29 \section{Hvorfor \AOOS?}
30 \begin{quote}
31 \emph{Hvorfor skrive endnu et system til at gøre arbejdet med PHP lettere, har vi ikke nok? Hvad gør \AOOS bedre end alle andre?}
32 \end{quote}
33 \AOOS er skrevet med det mål at give folk, der skriver moduler, nogle redskaber til at gøre arbejdet nemmere. Det betyder ikke at \AOOS gør arbejdet nemt, blot nemmere. En standard \AOOS installation kommer med nogle få indbyggede moduler og ellers er det op til folk selv at enten skrive moduler eller hente moduler som andre har skrevet. Takket være \AOOS er det utroligt nemt at gøre.
34 Det betyder også at \AOOS ikke fylder mere end at det lige netop dækker dit behov.
36 \section{Filstruktur}
38 \section{Modul-typer}
40 I \AOOS er der to slags moduler: de indbyggede moduler, der er i alle \AOOS installationer og moduler som man selv installerer.
41 Fælles for begge typer er at de instantieres med en reference til et \AOOSCore-objekt og er nedarvet fra \AOOSModule-klassen. Men her ophører lighederne også.
42 \BUILTINS instantieres mange gange, mens \lOADABLES kun instantieres en gang.
44 De \lOADABLES vil ikke blive berørt i dette dokument, mens de \bUILTINS vil blive beskrevet efter skabelonen:
45 \begin{enumerate}
46 \item Formål
47 \item Implementationsdetaljer
48 \item Nuværende stadie
49 \end{enumerate}
50 De enkelte funktioner i moduler vil ikke blive beskrevet da disse er dokumenteret i selve koden. Dokumentation kan genereres med doxygen.
52 Derudover vil en beskrivelse af \AOOSCore også blive beskrevet.
54 \section{AOOSException}
55 \subsection{Formål}
56 Formålet med AOOSException-klassen er at skabe en måde at bruge exceptions der integrerer med resten af systemet
58 \subsection{Implementationsdetaljer}
59 Som udgangspunkt bliver en AOOSException smidt som en \emph{Fatal error} hvilket får \AOOS til at stoppe øjeblikkeligt.
61 \subsection{Nuværende stadie}
62 AOOSException er tæt på at være færdig. \texttt{\_\_toStr()}-funktionen skal muligvis ændres, men ellers er funktionaliteten færdig.
64 \section{AOOSModel}
65 \subsection{Formål}
66 At skabe en model-lignende klasse med det formål at skabe en ensartet måde at gemme data i AOOS på.
68 \subsection{Implementationsdetaljer}
69 Modellen er implementeret som en todimensionel liste som dermed skaber en tabel. Hver kolonne i tabellen har et unikt id. En grafisk fremstilling af modellen kunne dermed se sådan ud:
71 \begin{center}
72 \includegraphics[width=8cm]{aoosmodel.png}
73 \end{center}
75 Dermed indeholder alle rækker altid lige mange elementer, uanset om en kolonne ikke har fået tilføjet data.
77 Data kan tilføjes på to måde, enten ved at bruge \texttt{addRow()} og \texttt{setData()} funktionerne eller ved at bruge \texttt{append()} funktionen. Den første løsning kræver et \texttt{setData()}-kald for hver kolonne der skal have tilføjet data, mens \texttt{append()} tager et eller to arrays som argumenter og automatisk udfører \texttt{addRow()} og \texttt{setData()}-kaldene. \texttt{append()} er at foretrække når det handler om simpel indsættelse af data, mens \texttt{setData()} har den fordel at den tager rækkenr. og kolonneid som argument og det er dermed muligt at opdatere data der allerede er indsat ved hjælp af \texttt{setData()}.
79 Når data skal hentes ud af modellen findes der mange muligheder. \texttt{data()} returnerer alt der er i tabellen. \texttt{getColumn()} og \texttt{getColumns()} returnerer fra de(n) givne kolonne(r) inden for rækkeintervallet, angivet af de to sidste argumenter. \texttt{getRow()} returnerer en enkelt række og \texttt{getRows()} returnerer rækkerne inden for den givne interval.
80 Funktionerne \texttt{setEscape()} og \texttt{setQuote()} bestemmer om data skal hhv. escapes og quotes. Pr. default er escaping sat til true, mens data kun vil have quotes hvis \texttt{setQuote(true)} er kaldt.
81 Escaping er gjort med \texttt{mysql\_real\_escape\_string()} og quoting foregår ved at tilføje gåseøjne omkring data.
82 En anden ting der er vigtig at bemærke er at \texttt{data()} kun returnerer data der har et kolonneid der er gældende.
84 Kolonneid sættes med funktionen \texttt{setColumnIndex()} der tager et etdimensionelt array som argument. Hvert element i det givne array vil så svare til et kolonneid.
86 Rækker kan slettes med \texttt{deleteRows()} og dermed har modellen CRUD-egenskaber.
88 \subsection{Nuværende stadie}
89 I øjeblikket er modellen på et stadie hvor den er brugbar, men mangler funktionalitet. Bl.a. er field types og \texttt{getColumns()} ikke implementeret.
92 \section{AOOSStorageDevice}
93 \subsection{Formål}
95 \subsection{Implementationsdetaljer}
97 \subsection{Nuværende stadie}
100 \section{AOOSCore}
103 \end{document}