terminologia e modus operandi corretti

Ho creato una piccola base dati relazionale e ho sviluppato una classe per entità e la rispettiva DAO che ne esegue le query. Le classi create una per entità riprenderebbero in sostanza i valori dei campi e aggiunge dei metodi, oltre ai get / set; indi non si tratta di DTO, anche perché un meccanismo simile è già implementato altrove e poi queste classi farebbero qualcosa in più dei soliti get / set tipici per il trasferimento dei dati...

Chiunque abbia un minimo di dimestichezza con j2ee, avrà notato la somiglianza con quel mondo di questo mio piccolo sviluppo in php.

La domanda è infatti questa: è correttao fare qualcosa di simile? Per php non ho mai trovato implementazioni simili e molti progetti degni di nota sono sviluppati utilizzando un misto tra procedurale e oggetti stdClass et similia (ad esempio le classi per xml), magari impostati su dei framework ben definiti.

Dal mio canto, ho letto che i design pattern sono applicabili a tutti i linguaggi OO - a meno che questi prevedano altre soluzioni agli stessi problemi - e quindi mi son trovato bene a sviluppare in questo modo.

L'altra domanda riguarda la terminologia da usare. Dovrei scrivere due righe tecniche a riguardo, e volevo sapere se è corretto - e non adattato - chiamare quel mio insieme di classi come model, le DAO come persistence (ovviamente) e i file .inc (uno in verità) come libreria.

Ho cercato di creare un progettino in php cross CMS (permettetemi il termine che vi esplicherò). Dev'esser portabile in diversi contesti php, quali CMS o progetti sviluppati via framework senza troppe modifiche invasive.

Ho creato una directory dentro la quale ho organizzato gli script, nella root della stessa appare un script *.inc, utile all'implementazione di una funzione simile all'__autoload.

Chi intende utilizzare il progettino in questione, può solamente importare lo script .inc e, nel momento in cui intende utilizzare le classi, instanzia un oggetto di tipo Autoload (contenuto dentro il .inc) passandoci come parametro il nome della classe. Attraverso un get, si ha la pathaname relativa della classe richiesta, pronta per poter essere inclusa.

In verità questa classe è stata fatta per essere usata con un __autoload (o un sistema simile) già implementato, all'interno del quale abbiamo una variabile con il nome della classe richiesta, da poter passare come parametro del costruttore Autoload.

Le domande sono le seguenti: è giusto creare una classe simile da instanziare?

Inizialmente avevo pensato ad una classe con metodi statici: ad ogni chiamata esegue dei calcoli per creare la pathname corretta da restituire; Però ho pensato che, nel costruttore, posso eseguire una volta solamente questo calcolo per poi valorizzare all'attributo $pathname e dare poi un get_pathaname leggero e veloce.

Inoltre è corretto che un costruttore, prima di assegnare i valori, esegua dei controlli prima, magari richiesti a dei metodi privati?

Non ho ancora codice, però, per andare nel dettaglio, questa classe implementa una serie di costanti con le pathname relative delle diverse dicrectory del progettino che contengono le classi.

Scusate per la lunghezza, grazie per le eventuali risposte.

inviato 6 anni fa
larchitetto
X 0 X

Non ho ben capito cosa tu hai creato, che caratteristiche ha e come è strutturato...

Io personalmente trovo macchinoso il sistema che vuoi utilizzare per richiamare le varie classi.

Non ti conviene creare un semplice oggetto che inizializzi il tuo applicativo e poi si può direttamente richiamare la classe di interesse? Un po' come fa Zend Framework...

Temo però di non aver capito proprio niente...

risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X

azz mi sono espresso forse troppo genericamente.

ho dei dati su un db, che vorrei gestire in modo opportuno. non si tratta della creazione di un sito o cose simili, è un progettino che poi sarà implementato - come estensione, modulo, etc - da altri siti che intendono manipolare tali dati.

indi da lì l'esigenza di creare il tutto in modo tale da poter essere implementabile dovunque o quasi.

ho pensato di utilizzare la oop di php5. quindi, ho il db, ho utilizzato il pattern DAO per poter eseguire le query e una serie di classi che, istanziate opportunamente possono eseguire delle operazioni, modificare i propri dati per poi salvare tutto su db.

come dicevo, non ho mai fatto una cosa così con php e quindi potrei ignorare molte cose, e mi son appellato a ben altra pratica che ho trovato cmq valida tutto sommato anche in altri contesti - alla fine sempre di oop si parla -, quindi ho posto quella serie di domande per poter essere sicuro di non errare...

ritornando alla tua soluzione proposta, sostanzialmente ho fatto come dici tu. Esiste una classe Autoload da istanziare che poi si occupa di cercare e includere le classi volute. Se questo oggetto si trovasse dentro un eventuale implementazione di __autoload, avrei dinamicamente il nome_classe sempre a portata di mano.

per ulteriori chiarimenti son qua, mi rendo conto che sto scrivendo cose atipiche.

risposto 6 anni fa
larchitetto
X 0 X

Dopo la delucidazione risponderei:

chiamare quel mio insieme di classi come model, le DAO come persistence (ovviamente) e i file .inc (uno in verità) come libreria

Che la terminologia che vuoi adottare può andare bene.

Per la prima domanda che ponevi invece, un qualche cosa di analogo credo tu possa trovarlo all'interno di alcuni framework php, quello che conosco meglio è Zend Framework. Contiene degli oggetti per creare dei model per gestire il proprio database.

Ti consiglio dunque di dare un occhio a questi oggetti che potrebbero pure ritornarti utili.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

...Ok, grazie.

Controllerò :)

risposto 6 anni fa
larchitetto
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda