martedì 18 dicembre 2007

Web user control vs Custom user control

Argomento non semplice... quando conviene usare i "wuc" e "cuc" ?

Web user control
Comunemente noto come "questa porzione di pagina la userò in più pagine se non in tutte" viene generalmente usato per molteplici scopi. Ha tante valenze, potrebbe essere sfruttato per dare le intestazione alla pagina, per realizzare i menu', e tutto quello che più comunemente può apparire in più punti della vostra web application.

Per fare un esempio:
In un anagrafica utenti potremmo individuare :
  1. Form per inserimento
  2. Griglia per modifica e cancellazione
  3. Combo/lista per selezione di un utente
Il form potrebbe essere reso con un web user control che propone le text box necessarie all'inserimento
la griglia potrebbe essere una gridview con item template per la modifica e la cancellazione degli elementi
la combo potrebbe essere una combo box riempita con tutti gli elementi dell'anagrafica.

Ogni uno di questi elementi potrebbe essere riutilizzato all'interno del nostro applicativo, creando così una
univocità di chi svolge tutto quello che riguarda gli utenti.

Una pagina per l'associazione di utente a dei gruppi potrebbe ad esempio contenere solo il combo degli utenti
senza dover reimplementare lo stesso codice.

Chiaramente questo consente un ottima gestione del proprio applicativo, e finalizzarebbe gli interventi in caso di modifica senza dover agire in più punti diversi.

Ma in tutto questo potrebbe verificarsi un "fastidio" il codebehind ... e a meno che non ci siano altre possibilità questo codice potrebbe essere letto, e peggio ancora modificato da chi non dovrebbe.

Intendo espressamente il fatto che se realizziamo un applicazione per un cliente, tutto il codebehind è tutto in chiaro,
consentendo l'interpretazione del sorgente da parte di altri.

Tutto questo può essere dannoso, sia per i dati, sia per il destino della nostra applicazione.

Custom user control
Questo è un concetto un po più emblematico... comporta sicuramente la scrittura di molto più codice di un web user control, ma ci consente di creare una struttura più protetta e più completa.

Protetta perché alla fine del nostro custom user control avremmo un compilato.
Completa perché al netto del nostro applicativo ci sarebbe ben poco da vedere da parte di chi non deve.

Giusto per fare un esempio di custom control

  1. Create una nuova soluzione di tipo web application
  2. aggiungete un nuovo progetto di tipo class library
  3. aggiungete come riferimento alla web application il class libray
  4. aggiungete questa classe:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{
public class mControl:Control
private string _spanText ="inserire qui il testo";

public virtual string spanText

{
get {return _spanText;}
set {_spanText = value;}
}

protected override void Render(HtmlTextWriter writer)
{
writer.Write("< span>"+ spanText +" </span>");
}
}


E' necessario aggiungere alla class library i riferimenti a : system.web, system.drowing.

Ora compilate, e troverete nella barra degli strumenti il vostro nuovo Custom user control... eseguite il drag n'drop
del vostro controllo nella vista di design della pagina. Ed ecco fatto.

Nella vostra applicazione vi ritroverete solo e soltanto il controllo e nessun codice leggibile o interpretabile da altri.

Chiaramente questo è un gran vantaggio, ma risulta molto complesso interpretare tutta un'applicazione strettamente basata su "cuc", questo perché il dispendio di energie per questa realizzazione è sicuramente notevole.

Facile o difficile la scelta spetta sempre a noi, dobbiamo individuare fino a che punto l'utente finale potrebbe avere le competenze necessarie a modificare i nostri sorgenti, o interpretarne le logiche.

Per quanto mi riguarda credo che questa via sia un buon compromesso per sfruttare al meglio una programmazione ben strutturata.

Un esempio fra tutti, questo modalità consentirebbe con maggior facilità la gestione di plugin anche nell'ambito web.

Nessun commento: