C# DataBinding del 5 – Interfaces, databunde List

Skrevet - Wednesday, January 9th, 2008 kl. 21:28 | Kategori - * Kodning

Som i del 4 vil jeg koncentrere mig om de interfaces, der er en fordel at implementere ved databundne objekter – denne gang for List<T>. BLW fra SourceForge implementerer dem alle, hvis du gerne vil se en aktuel implementation af dem alle. BindingList<T> implementerer allerede IList, ICollection, IEnumerable og IBindingList, hvorfor jeg vil foreslå at du laver din liste med udgangspunkt i denne. Der er fire interfaces tilbage, som er rigtig gode til DataBinding – IBindingListView, ITypedList, ICancelAddNew og IRaiseItemChangedEvents. De er alle implementeret i BLW. Til og med IBindingListView er de hierakisk opbyggede – dvs. at fx IBindingList implementerer IEnumerable, ICollection og IList. De er nævnt i den hierakiske rækkefølge.

IEnumable

Dette interface giver mulighed for at iterere over de objekter, der er i listen. Dette er et absolut minimum for langt de fleste lister.

ICollection

Dette interface tilføjer metoder til at tælle antallet af objekter i listen samt mulighed for at kopiere listen til et array.

IList

Dette interfacer tilføjer mulighed for at tilføje og fjerne objekter fra listen. Derudover giver den mulighed for at finde objekter i listen.

IBindingList

Dette interface tilføjer mulighed for at implementerer basisk sortering og søgning (typisk på en enkelt property). Derudover kan listen nu indexeres. MS foreslår at man i UI implementererIBindingList på sine objektlister til DataGrids.

IBindingListView

Dette interface tilføjer mulighed for at implementere filtre, avanceret søgning/sortering.

Hvilket interface man tager udgangspunkt i, afhænger af hvor avanceret applikationen/skærmbilledets funktionalitet skal være. Det er klart at jo flere metoder, der implementeres, jo tungere bliver listen performancemæssigt. MicroSoft foreslår at man i Business-laget anvender en liste, der implementerer til og med IList interfacet, da evt. sortering/filtrering gerne skulle ske inden objekterne bliver lagt i listen (dvs. i databasekaldet). I UI vil det i de fleste tilfælde være en god ide, at anvende en stærkere liste, for at give mulighed for filtrering/søgning direkte i skærmbilledet uden at skulle kode funktionaliteten selv.

ITypedList

Dette interface tilføjer typesikkerhed i listen – dvs. at man herefter vil kunne bestemme typen af en given property på objekterne i listen. Det giver mulighed for at lave nogle mere generiske datavisninger. Dette interface benytter vi meget i vores specielle DataGridView. Vi har valgt en implementation, hvor vi sender typen med i constructoren, for at danne kolonnerne i datagridviewet programmatisk i stedet for at skulle håbe på at autogenereringen er i den rigtige rækkefølge.

IRaiseItemChangedEvents

Dette interface tilføjer funktionalitet til at sikre at hvis et objekt opdateres programmatisk, så bliver UI’en opdateret.

ICancelAddNew

Dette interface tilføjer funktionalitet til at fjerne ikke-validerede objekter fra listen, hvis fx en søgning bliver kaldt før objektet er valideret.

Umiddelbart er de ovenstående interfaces rare, når man har implementeret dem. Brugere forventer typisk at skærmbilledet opfører sig hensigtsmæssigt i disse situationer. ICancelAddNew kan diskuteres om man istedet skal implementere at brugeren bliver promptet for om objektet skal gemmes før det går tabt. De håndterer dog forholdsvis sekundære situationer, så hvis der skal spares kan man starte her.

Hvis du er i tvivl om hvordan et interface implementeres, er det for det første noget du virkelig skal overveje at sætte dig ind i. Dernæst kan du anvende BLW’s implementering som skabelon – den implementerer som sagt samtlige, jeg har nævnt her. Det letter arbejdet enormt ved opbygning af skærmbilleder – og det er et stykke arbejde, der kun skal laves en gang. Desuden bliver skærmbillederne meget kode-’lette’, fordi funktionaliteten allerede er implementeret i de fleste standardkontroller, når listerne/objekterne implementerer disse interfaces.

Feed | Trackback |

Post a Comment