Quando si creano delle applicazioni multi-tier spesso nello strato di
Business Logic per mappare i dati io creo delle collection fortemente tipizzate per poter rappresentare i miei oggetti di businesse dovendo poi fare il binding con oggetti quali datagrid, combobox(dropdownlist) ecc.
Microsoft per le collection fortemente tipizzate consiglia di ereditare da
CollectionBase quindi vi faccio vedere come funziona con un esempio reale.
CollectionBase è una classe presente nel namespace System.Collection ed implementa l'nterfacce
ICollection, IList e IEnumerable.
Come vedete proprio l'interfaccie che servono per creare le collectione quelle per fare il binding con winform(IList) e con le webForm(IEnumerable).
Al suo interno collectionbase tiene un ArrayList dove memorizza gli oggetti.
Faccio un esempio
Quando creo degli oggetti di business creo sempre l'interfaccia così da essere più dinamica e poter creare più oggetti che implementano tale interfaccia.
Ho un 'interfaccia IAttivita così fatta
public interface IAttivita
{
Int64 IdAttivita{get;set;}
string Descrizione{get;set;}
DateTime DataAttivita{get;set;}
string SedeAttivita{get;set;}
Int32 IdTipoAttivita{get;set;}
} // end class - IAttivitaChiaramente una classe Attivita che la implementa.
Ora nella mia collection che chiamo AttivitaCollection come da guida microsoft
Devo definire i metodi che mi permetto di trattare l'oggetto IAttivita nella collection
public IAttivita Item(Int32 index)
{
return (IAttivita)List[index];
}
public Int32 Add(IAttivita item)
{
return List.Add(item);
}
public void Insert(int index, IAttivita item)
{
List.Insert(index,item);
}
public void Remove(IAttivita item)
{
List.Remove(item);
}
public bool Contains(IAttivita item)
{
return List.Contains(item);
}
public int IndexOf(IAttivita item)
{
return List.IndexOf(item);
}
Come potete vedere lavoro con LIST che sarebbe l'arraylist della collectionbase e aggiungo/rimuovo il mio oggetto IATTIVITA.
Unico problema e che non esiste l'ereditarietà multipla quindi ricordatevi che quando ereditate da CollectionBase non potete utilizzare nessuna altra classe, in tale caso vi conviene implementare da voi ICollection,IList,IEnumeralbe.
Qualcuno utilizza collectionBase? cosa ne pensa? aspetto dei vostri commenti!