Newsgroup: it.comp.lang.delphi
Titolo: [semi OT] Perché e quando è utile realizzare un sw multi tier?

proprio come da oggetto.
thanks. :-)
Fed.

Esempio 1 (client/server, non web)
Hai una app basata su db oracle.
Le licenze oracle COSTANO.
Ergo: fai una app a 3 livelli.
a) Thin client che gira sui pc sui quali non installi il client di
oracle
b) un livello intermedio che fa da "concentratore" . Questa parte gira
su un pc sul quale installi il client di oracle
c) un server sul quale gira il motore db
Questa cosa fino a d7 la fai con corba o dcom. Adesso presumo la
faresti con rest/jquery
Risparmi un fottio di soldi.
In un caso del genere vale la regola del "puoi ma non e' detto che
devi"....
Esempio 2
Hai da mettere in piedi una integrazione tra 2 diversi software
scritti da due diverse aziende.
Hai n client, un server sul quale gira il motore db oracle e un server
sul quale e' in esecuzione il software da integrare.
Bene. Aggiungi un "qualcosa" che fa da collettore delle richieste che
tutti gli n client devono inviare al software da integrare.
Quindi, ogni client manda le sue richieste al "qualcosa", il qualcosa
fa da tramite verso il software da integrare e smista le risposte ai
client.
In un caso del genere, semplicemente DEVI, xche installare su ogni
client il software da integrare sarebbe una follia, sia economicamente
(costo delle licenze) sia tecnicamente, visto che stu kaz di software
se gli dai un server con 64 processori e qualche terabyte di ram ti
dice "hai altre risorse da darmi???"
Questa cosa l'ho fatta io...usando un semplice protocollo tcp.
Pensa infine, ad esempio, al sistema di prenotazioni di trenitalia.
Ci sei tu davanti al pc con la tua carta di credito, il web server di
trenitalia, il loro server che gestisce il pagamento e il server del
tuo istituto di credito dal quale passa la transazione di addeito su
conto....
Qua non hai alternative!
Per completezza, e' bene chiarire che:
1) scrivere software non e' facile e non e' da tutti
2) PROGETTARE un software non e' facile ed e' per pochi
3) PROGETTARE un software a piu di 2 livelli richiede studio,
competenza, lungimiranza e buon senso di parecchi ordini di grandezza
superiori a quanto descritto nei punti 1 e 2, oltre alla scontata (ma
non per tutti) consapevolezza che nessuna tecnologia (dcom, wcf,
javabeans etc...) risolve la cattiva progettazione.
A

 2) PROGETTARE un software non e' facile ed e' per pochi
il problema � farlo capire ai clienti, quando ti dicono "eh, ma su epay
il tuo software lo pago pochi euro" (in realt� si riferiscono ad una
monnezza fatta in access.. ma per loro tutto � la stessa brodaglia..
ci� che cambia sono solo gli euro :) ), oppure "eh, ma piuttosto mi
prendo 1000 sw free, li metto insieme, e ci faccio le stesse cose"
(sentito con le mie orecchie)
Ale

 proprio come da oggetto.
La definizione "universalmente codificata" di multitier la trovi dove 
avresti gi� dovuto guardare, su wikipedia
http://en.wikipedia.org/wiki/Multitier_architecture
 > Perch� (1) e quando � utile (2) realizzare un sw multi tier?
1)Perch� si tengono le logiche di gestione dei dati separate dagli stessi.
2)E' utile perch� separando le logiche, tu puoi modificare uno strato 
senza che gli altri debbano essere toccati a loro volta.(o comunque 
toccati minimamente, cio� senza stravolgere la cosa).
Piccola dissertazione:
Lo scopo �, come sempre, quello di raggiungere il massimo riutilizzo di 
codice. Perch� noi sviluppatori abbiamo l'ossessione del riutilizzo del 
codice? Perch� il codice nuovo � per sua stessa natura buggato. Va 
quindi testato, fixato, refattorizzato, fino a che non diventa stabile.
Una volta raggiunto una certa stabilit�, quel codice � considerato 
sicuro e quindi puoi riutilizzarlo senza il rischio di intrudurre dei 
bug ulteriori.
Senza trascurare l'aspetto economico della cosa: la scrittura del codice 
costa tempo. Siccome il tempo � uno dei parametri su cui tu vieni pagato 
e su cui tu devi fare delle stime di produzione, la conseguenza � che 
devi diventare produttivo nel minor tempo possibile per avere pi� 
margine possibile.
Riutilizza, riutilizza codice pi� che puoi, cos� abbatti il tempo di 
produzione, e resti competitivo.
-- 
morde
D5,D6,D7
Firebird 2.1
QT 4.7.0 (MingW) QT Creator 2.1

Ok, inizia a farsi strada un po' di chiarezza.
La definizione mi � stata chiara da subito (...anche senza wiki ;-)...), 
ma la cosa che non ho percepito fino in fondo � la domanda cos� come 
l'ho posta, al di la dei teorismi e dei vari partiti presi;
quindi insomma se ho gi� sviluppato "per me sufficiente" dimestichezza 
con le applicazioni C/S, perch� affrontare lo studio delle applicazioni 
n-tier (a parte il bagaglio professionale)? in cosa mi potrebbe 
agevolare? quali ambiti? Si potrebbe ipotizzare un utilizzo in 
applicazioni che lavorano esclusivamente in una LAN e qualche smart 
device occasionale?
...e domande simili. Questo c'� dietro il mio quesito.
Ad ogni modo grazie tantissimo per le indicazioni che mi avete girato 
fin qui.
Fed

 esclusivamente in una LAN e qualche smart device occasionale?
Perch� l'n-tier � la forma con la quale � scritto e organizzato il tuo 
codice, mentre il C/S � una metodologia di accesso ai dati che il tuo 
codice implementa: si potrebbe dire che sono due cose diverse e che C/S 
� una applicazione di codice n-tiered.
Il concetto � utilizzato di default gi� in delphi: se tu trascini una 
tadotable e fai i dovuti collegamenti per realizzare un piccolo client, 
hai scritto un software RAD che usa la metodologia C/S, le cui classi 
sono scritte n-tiered (la VCL � scritta con paradigma MVC).
Quando customizzi la griglia collegata alla adotable, tu stai operando 
sulla View. La ADOTable � il Model, ed il Controller viene implementato 
dai collegamenti tra la griglia e l'adodataset: ad esempio quando 
modifichi un valore nella griglia, il Controller informa il Model che il 
dato � cambiato e provvede a salvare. Viceversa, se cambia un valore 
nella base dati collegata, al momento del refresh la griglia (View) 
viene informata dal Controller sui dati che sono caricati nel Model e 
provvede a renderizzarli nel modo corretto (numeri con punteggiatura, 
datetime formattatti, colore, font, ecc..)
Ora fai finta che tu sia un freelance ed io ti chieda di scrivermi una 
griglia che gestisca i dati di tipo tstring con un editor RTF, perch� 
voglio mettere in quei campi delle foto con descrizioni e decorazioni.
Tu non sai da dove arrivino i dati, sai solo che io ti passer� una 
stringa e tu dovrai trasformarla in un richtext, darmi un editor per 
editare e poi ritrasformarla in stringa.
In questo caso, tu realizzerai un componente software che rappresenta la 
View di un mio Model, che provveder� poi a collegare tramite le 
interfacce delle classi. Tu in questo modo stai lavorando n-tiered.
Se parti da wikipedia e approfondisci, vedrai che tree-tier e MVC sono 
indispensabili e non puoi fare a meno di conoscerli (almeno teoricamente).
ciao
