[Php-it] Estendere una classe o incorporare un oggetto?

Andrea Colanicchia andrea.colanicchia at gmail.com
Wed Feb 7 16:04:18 CET 2007


On 2/7/07, Domenico L. <domenico.lorusso at pleiade.it> wrote:
> Immagina che A abbia la proprietà *privata* teta e che V debba potervi
> accedere.
>
> Questo problema non sono riuscito a risolverlo.

Infatti non penso si possa risolvere, a meno che tu non controlli nei
metodi setter e getter di A che chi sta accedendo alla variabile sia
V, vietando l'accesso a tutti gli altri.

Non so di preciso come fare questa cosa, ma penso che si possa fare...

> Altre problematiche li incontro quando necessito di gestire alcuni
> metodi di V che possiedono la logica di utilizzo dei dati di A ma i
> metodi che fanno inferenza su questi dati necessitano di un accesso
> diretto...

Vedi sopra.

> alla fine ho optato per una soluzione che mette insieme MVC, factory e
> decoration.. (anche se non è linearissima, ho dovuto accettare dei
> compromessi:-( )
>
>
> Ho la classe Control (C)che fa pochissime cose ma è di fatto il Factory
>
> Mette a disposizione i metodi per impostare e creare il VariableModel
> (VM), la Form (F) e il builder (B)
>
> F e B hanno il metodo link che permette di impostare le proprietà
> private _parent (riferiemnto a C) e _vm ( riferimento a VM )
>
>
> In questo modo F, che implementa l'interfaccia di acquisizione dati, e
> B, che implementa la metodologia di costruzione dell'output) posso
> accedere direttamnte a VM

B dovrebbe essere il controller?

Secondo me, per rispettare il modello MVC, solo B dovrebbe manipolare
i dati di VM, mentre F dovrebbe solo controllare lo stato di VM, anzi
dovrebbe essere notificato dello stato di VM, come in un "observer".

> VM dal canto suo mette a disposizione molti (troppi) metodi per accedere
> e manipolare i propri dati

VM è il model giusto?

Beh il model deve esporre i propri metodi e proprietà, non è sbagliato.

> Volendo potrei fare in modo che F, C e B condividano con VM l'attributo
> teta di cui sopra, ma per ora cerco di evitarlo :-)

Cioè? Condividere in che senso?

> Prima bastava istanziare una classe ora occorre istanziarne 4.

Il prezzo della flessibilità :)

> Per ovviare mi occorre rendere C il componente (non concreto)
> dell'esempio di cui hai postato il link.
>
> Aggiungendo i metodi più comuni dei 4 oggetti
>
> E' corretto?

Beh, il problema che stai affrontando mi sembra un po' complesso e è
difficile da qui ovviamente capire bene tutto, diciamo che devi
trovare un compromesso tra la teoria dei pattern di cui stiamo
parlando e le esigenze concrete a cui devi rispondere.

Insomma, se fa qualcosa che a te funziona bene ed è abbastanza usabile
e gestibile diciamo che ci sei. :)

Andrea.


More information about the Php-it mailing list