in questi giorni di afa, complice il dover aggiunger nuove funzioni al mio CMS, ho deciso di rivedere parte della sua architettura.
la prima riga di codice che ho scritto per GAP, così battezai il CMS, risale ormai allo scorso anno, momento in cui abbandonai il mouse per disegnare, per scorrazzarlo tra righe di codice, all'epoca, dall'oscuro significato..., ma questa è un altra stroria (citazione liberamente tratta da MICHAEL ENDE).
la parte più vecchia e scitta male, è sicuramente la gestione delle categorie dei contenuti, non contemplando di fatto la possibilità di n sottocategorie (limitazione in qualche modo superata con tratagemmi da vergogna).
nella nuova versione adotterò una tecnica "alla Control" classe base ti tutti i WebControl e HtmlControl, la mia classe base per le categorie (ItemBase) avrà una propietà "Items", che restituisce un collezione di Item e così vià, verso l'infinito e oltre (oggi sono in vena di citazioni).
tutto questo si riallaccia con un post di ieri link, come mantenere le relazioni tra i genitori dei vari Item e avere un rapito accesso all'oggeto padre di una sottocategoria o meglio ancora come accedere direttamente ad una fantomatica "MainCategory", assimilabile all'oggetto Page, restituito dalla proprietà Page che tutti i controlli espongono?.
uno sguardo alla classe Control.
abbiamo già detto che la classe control espone la proprietà Page, ma come è quando viene valorizzata ?
partiamo dal metodo AddedControl(Control control, int index), questo metodo viene richiamato ogni qual volta viene aggiunto un nuovo controllo alla collezione Controls, infatti andando a curiosare nella classe ControlCollection, troviamo nel metodo Add(Control child) la seguente riga this._owner.AddedControl(child, num1); _owner è un riferiemento al controllo che espone la propietà Controls, utilizzato puer inizilizzare l'istanza di ControlCollction..
tornando all'iterno di AddedControl:
protected internal virtual void AddedControl(Control control, int index)
{
...
control._parent = this;
control._page = this._page;
...
}
in pratica la propietà page del controllo inserito viene impostata con il riferimento all'istanga dell'oggetto Page del controllo contenitore (giustamente).
la madre di tutti i contenitori (la classe Page) nel suo costruttore fa :
public Page()
{
this._transactionMode = 0;
this._validated = false;
this._page = this;
}
questà ì l'architettura che adotterò nella nuova versione di GAP.
p.s tutto quello sopra era solo un pretesto per lincarvi il blog di uno dei miei ancestrali passatempi link, ne ho talmente tanti di hobby che non riesco a farne uno perbene :)
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Modificare il controllo TreeView, il 2 dicembre 2008 alle 19:27
- Perfezioniamo il ProfileDataSorce, il 13 ottobre 2008 alle 11:14
- Un DataSource per il Profile, il 10 ottobre 2008 alle 15:06
- TrueSpace 7 gratuito, il 24 luglio 2008 alle 10:59
- adesso dico la mia sull'Iphone, il 22 luglio 2008 alle 10:33
- Come tutto ebbe inizio, il 21 luglio 2008 alle 09:22