Quando ASP.NET ostacola il buon disegno !

   Nel implementare una applicazione uso gli oggetti del framework .NET, ovviamente! Per quanto cerchi di applicare DIP (il principio di buon disegno OO chiamato "Dependency Inversion Principle") il framework finisce comunque per avere un ruolo nel facilitarmi o complicarmi l'implementazione delle scelte di disegno che ho fatto.

    Questi i due casi in cui ASP.NET mi ha reso complicata o impossibile una buona scelta di disegno OO:

  1. Cosa? Estrarre delle nuove classi da una classe (ossia fare Refactoring) quando il codice  diventa troppo corposo e complicato e parti di codice sono duplicate e fare evoluzioni (togliere bug, aggiungere o cambiare funzionalità) richiede di intervenire a macchia di leopardo su parti del codice apparentemente non correlate.
    Chi? I Web User Control .ASCX
    Perché? Perché il codice da estrarre fa uso di funzioni di System.Web.UI.UserControl che sono accessibili solo dalla classe derivata (come la property ViewState o il metodo LoadViewState) e non da una diversa classe.
  2. Cosa? Separare i dati (lo stato della appplicazione e i dati del dominio applicativo) dalla loro presentazione e dal controllo del flusso di interazione utente. Ossia applicare il pattern MVC.
    Chi? I WebForm ASP.NET.
    Perché? Ad esempio per estrarre responsabilità dalla singola pagina e inserirle in classi diverse è necessario usare funzioni poco conosciute (come usare HttpContext per accedere alla Session da classi che non derivano da Page1) o implementtare funzioni di sistema assenti (come la property CurrentDocument che nella classe System.Uri è privata ma invece è utile per implementare il controllo della navigazione1)
  3. ...

Lascio ai nostri MVP (che fa rima col pattern MVC) l'onere di informare Microsoft di queste difficoltà avvertite da un  programmatore .NET (ma sono il solo??? voi come avete risolto questi casi? fatemi sapere).

Se non posso conoscere i motivi per cui il Team di ASP.NET ha scelto in entrambi i casi (Web Form e Web User Control) di disegnare le cose in questo modo posso invece rilevare che in entrambi i casi le funzioni del framework sono rese disponibili attraverso l'ereditarietà invece che il contenimento (scelta di disegno notoriamente sconsigliabile) e questo potrebbe soffrire del problema della FragileBaseClass.

Bene... dopo questo sfogo posso tornare a lavorare al user control DataTableEditor, dopo aver combattuto duramente col problema al punto 1 mi aspetta un po' di refactoring (per eliminare le smell di 'codice duplicato',  'shotgun surgery' e 'lunghe liste di switch/if ').

---------
(1) Vedi l'esempio scaricabile della sessione Refactoring Applied dal Workshop UGI Architecture & Management

Print | posted @ mercoledì 11 maggio 2005 13:16

Comments on this entry:

Gravatar # re: Quando ASP.NET ostacola il buon disegno !
by Lorenzo Barbieri at 11/05/2005 15:27

Per Damiano... certo che c'è modo e modo di dire le cose, e in questo caso sei stato veramente scortese e senza neanche firmarti... :-(
Gravatar # re: Quando ASP.NET ostacola il buon disegno !
by http://blogs.ugidotnet.org/marki at 11/05/2005 15:33

mi unisco anke io al commento di Lorenzo, spiacendomi di essere OT nel post di (luka). Damiano forse dovresti leggere un po meglio quello che dice (luka) senza fermarti a quello che un linguaggio può e non può fare. (luka) ti parla di archietture e/o gestione di progetti... ok il commento termina qui. (skusa luka).
Gravatar # re: Quando ASP.NET ostacola il buon disegno !
by Leoncini Marco at 11/05/2005 19:29

durante lo sviluppo mi sono trovato alcune volte nella situazione che descrivi, è un motivo per cui non utilizzo più UserControl ma solo WebControl, ma per inciso ViewState è sempre protected, l'ho aggirato in maniera poco elegante, qundo necessario con un bel new

ciao marco
Gravatar # re: Quando ASP.NET ostacola il buon disegno !
by Marco staffoli at 15/05/2005 21:11

Salve a tutti

Sto valutando alcuni linguaggi di programmazione proprio in base a criteri di
- produttività
- scalabilità
- robustezza
che essi consentono.

Luka, non sei il solo a pensare che "ASPnet ostacola i buon disegno"... sono molti quelli che dicono che le webform sono solo una questione di marketing di Ms e non una reale tecnologia su cui costruire applicazioni che rispettino i criteri di cui sopra.

Effettivamente rispettare un pattern MVC ha portato le mie applicazioni ad una maggiore robustezza.

Web form a parte (forse) anche con asp.net si riesce a creare applicazioni mvc

http://mavnet.sourceforge.net/

In java esistono moltissimo fremework di questo tipo già da anni. Java infatti incoraggia il pattern MVC.

E per aumentare il distacco tra presentazione e codice suggerirei di dare una occhiata qui

http://nvelocity.sourceforge.net/

Anche di questi progetti in java ce ne sono tanti. Vengono detti Template engine. Io ho provato Velocity e FreeMarker e, soprattutto quest'ultimo l'ho trovato geniale, praticamente perfetto.

Spero che facciano presto il porting in .net
Comments have been closed on this topic.