OOP, n-tier, design... Riflessioni personali di mezza stagione...

Eh già, sapevo che prima o poi avrei dovuto fermarmi a ragionare su questo aspetto ed alla fine è successo... Mi piace pensare al blog come ad un "vero" diario personale, da rispolverare dopo qualche mese per sorridere di quanto scritto in passato (ok, ok... voi potete già sorridere adesso ) ed oggi mi sento in arteria per uno di questi resoconti migliari!

OOP:
Per me semplicemente è divenuto il dna della programmazione "vera"! Purtroppo non è da molto che conosco e metto in pratica in modo un pò approfondito il mondo dell'OO, ma per ora il concetto ha letteralmente pervaso il mio modo di sviluppare codice. Al momento per rinuciare ad un'unghia di OO dovrebbero offrirmi come minimo una super funzionalità IA eee anche in quel caso foorse...
Non posso dire di essere diventato un "seguace" dell'OOP semplicemente perchè penso di conoscere solo il 2% di questo mondo, ma al momento è come leggere le ultime 30 pagine di un libro di Asimov: ad ogni pagina inizia ad avere senso tutto ciò che hai letto fin lì ed il libro ti sembra fantastico ma, la pagina dopo, la sopresa è ancora più profonda ed il libro ti sembra ancora più fenomenale!

E devo ringraziare per l'ennesima volta davvero tutto UGIdotNET per questo, e sinceramente grazie grazie ed ancora grazie soprattutto all'ultra-paziente Andrea per le infinite domande che si è sciroppato dal sottoscritto! Non sono ancora riuscito a fargli dire "non lo so"...e mi sa che non ci riuscirò mai!

n-tier:
Importante... o meglio, molto utile in alcuni scenari applicativi e comunque comodo dal punto di vista della mantenibilità dell'applicazione. Utile anche per la gestione della sicurezza dell'applicazione ed in un certo senso forse anche nello sviluppo in team. Lo strato intermedio forse in alcune applicazioni più "piccole" al momento mi sembra più un overload di codice che un reale vantaggio, mentre il DAL, a prescindere dal reale interesse nel poter cambiare provider mi sembra comunque un "must" per i vantaggi che porta.
Ovviamente queste sono solo le mie impressioni attuali e con ogni probabilità tra qualche mese mi ritroverò a non essere d'accordo con quanto scritto, ma sono fatto così... Devo fare "miei" certi concetti per poterci "credere fino in fondo!".

Design (parolona, detta da uno come me!) vs. RAD:
E' uno dei dubbi amletici di chi sviluppa per lavoro quando le dimensioni dell'organizzazione e la forza lavoro sono ridotte, in quei casi in cui lo è altrettanto la richiesta del cliente.
"Voglio un programmINO che mi faccia semplicemente queste cosINE..."
Che fare? Quanto soffermarsi su design e pianificazione? Spesso si impiegherebbe meno a fare il software piuttosto che studiarne il design e metterlo giù. Ma poi?
Se si decide di svilupapre il software sacrificando la fase di analisi e questo raggiunge il suo obiettivo (fortunatamente sembra che capiti molto spesso ultimamente...) piace, anche troppo, al cliente ed a quel punto iniziano i problemi. Sul telaio di una pseudo 500 costruita senza un progetto ci troviamo man mano ad aggiungere "pezzi" sempre più "pesanti" e complessi. Il risultato è che inevitabilemte prima o poi il povero telaio della ex-500 sbrocca e quando succede non c'è modo di capire cosa abbia contribuito maggiormente e soprattutto come porre rimedio.

Morale? Anche secondo me è sempre meglio fermarsi prima e buttare giù un minimo di schema quantomeno dell'architettura del progetto; magari in UML... altro "strumento" che purtroppo credo di non utilizzare (e soprattutto comprendere) ancora correttamente...

I dubbi:
So che la soluzione di moltissimi dei miei dubbi sarà in quei libri che devo (porca miseriaccia... DEVO!) riuscire a leggere al più presto, ma nel frattempo il lavoro deve proseguire e quindi mi trovo ad affrontare i dubbi e le riflessioni a "mani nude". Meno male che, anche in questo caso, c'è la pazienza degli UGIdotNETtiani che ogni tanto ci soccorre nei momenti difficili (una sorta di "Operatore" in Matrix!).

A dire il vero, comunque, affrontare prima il problema con la mia testa e poi conoscere la soluzione "seria" offerta dall'esperienza di qualcuno, sia in un libro o in un post, mi ha sempre aiutato a capire meglio l'argomento ed apprezzarne maggiormente la soluzione.

Prendiamo un esempio reale: transazioni ed architettura n-tier...

Che bella invenzione le transazioni! Ti preoccupi "solo" di prepararla come si deve... Tiri su tutto il polverone che vuoi e se qualcosa va storto ci pensa lei a rimettere tutto in ordine! Potessi farlo anche nel mio ufficio... (e magari anche in IIS... , meno male che arriva Whidbey con Cassini!)
Ok, si, lo so... non funziona proprio così con le transazioni... ma è solo una frase detta per entrare in argomento!

Immaginiamo un metodo InsertOrder fornito dal Data Access Layer che esegua le operazioni necessarie ad inserire un ordine, quindi con una INSERT dell'ordine, quelle per il dettaglio ecc. ecc.
Sfruttare le potenzialità delle transazioni in uno scenario di questo tipo da grandi soddisfazioni col minimo sforzo, ma cosa succede se l'inserimento di un ordine contempla operazioni esterne al DAL, come ad esempio l'invio di mail o l'inserimento in code di messaggi o magari più in generale di esecuzione di metodi contenuti, per esempio, nel Business Layer (quindi per definizione sconosciuto agli strati sottostanti)? Magari l'inserimento dell'ordine non è valido se non completa tutti i passaggi di business e quindi dobbiamo "annullare" tutta l'operazione in corso. La transazione a livello di DAL non ci basta più e per questo tipo di scenario dobbiamo creare noi una sorta di transazione.

Insomma, questo tanto per dire che di dubbi uno come me ne ha sempre di più. Il mio motto ormai da qualche anno è "Più cose impari, più cose scopri non di non sapere!" e sembra che per molto tempo ancora dovrà essere il mio cavallo di battaglia.

...speriamo!

Print | posted @ mercoledì 18 maggio 2005 18:19

Comments on this entry:

Gravatar # re: OOP, n-tier, design... Riflessioni personali di mezza stagione...
by Michele Lorizzo at 19/05/2005 01:27

Questione design : credo che per le problematiche che sollevi siano ideali per i principi dell'XP.
Analisi ... quanto basta per partire dando da subito 'valore' all'applicazione. Architettura ... da definire giorno-per-giorno ... questo, che normalmente genererebbe il 'caos' di cui parli, unito alle pratiche di XP (esempio TDD e refactoring), trasforma la tua 500 in una Alfa ( ).

Belle teorie ... se solo avessi più occasioni per 'sperimentarle' sul campo.

Ciao
Mike

P.S.
Ho un'altra copia originale di PowerDVD :-)
Gravatar # re: OOP, n-tier, design... Riflessioni personali di mezza stagione...
by Michele Lorizzo at 19/05/2005 13:14

Premessa ...
... probabilmente chi sul campo ha già esperienza potrà intervenire in modo più esauriente e preciso (non faccio nomi ma 'qui' sono i 'soliti noti').

Non è tanto il refactoring del design ma 'far crescere' l'architettura giorno per giorno ... chiaro che un base importante di partenza ci deve essere (e varierà a seconda dell'applicazione) ... ma è inutile cercare di modellare 'tutto' all'inizio, quando quel tutto spesso non si sa neanche cosa sia ...
Mi è capitato di far scelte per parti di applicazioni che, quando è arrivato il momento di implementarle, erano diventate semi-obsolete (o comunque non ottimali a causa magari anche di un limitato 'bagaglio tecnico' precedente che poi è cresciuto).

Ciao
Mike
Gravatar # re: OOP, n-tier, design... Riflessioni personali di mezza stagione...
by Mario Duzioni at 19/05/2005 13:54

Direi che anch'io la vedo così.

Pensandoci, è giustissima anche la considerazione sull'ampliamento del bagaglio tecnico come causa di modifiche alla struttura, sebbene giustamente ad un workshop qualcuno, non ricordo chi a dire il vero, evidenziava il fatto che non è bene cambiare le metodologie in corsa e fare una scarpa ed una ciabatta. D'altronde chi non ci è mai cascato almeno un pochino scagli la prima ciabatta!

Il punto del discorso penso sia proprio in quello che dici: riuscire ad azzeccare una "base importante di partenza" magari in relazione non solo esclusivamente all'applicazione che sarà, ma forse anche in piccola parte all'applicazione che "potrebbe diventare" (vendo sfere di cristallo a 99c chiamate chiamate numerosi ).

Grazie per la "riflessione", mi è stata d'aiuto!

Ciao
Mario
Comments have been closed on this topic.