L'astrazione del dato è tutto !!
In questo caso mi sono divertito a comprendere se e come fosse possibile arrivare ad al "limite dell'astrazione".
Partimao da quest'interfaccia, che al momento non serve ma torna comoda. L'idea è di relizzare un raggruppatore di classi entità.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataAbstraction.Data { public interface IEntity<K> { public K key { get; } } }
E queste le mie classiche entintà che come al solito non si discostano di molto dai miei classici esempi.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataAbstraction.Data { public class Category:IEntity<int> { public int id { get; set; } public string Name { get; set; } public string Descripiton { get; set; } public int key { get { return id; } } } public class Friend:IEntity<int> { public int id { get; set; } public string Surname { get; set; } public string Name { get; set; } public Category category { get; set; } public int key { get { return id; } } } }
Rispetto allo standard ( sempre del mio blog ) questa è la prima novità, quest'interfaccia ammetto che sembra di dubbia utilità in realtà è questa a reliazzare il salto fra chi gestisce i dati e chi li usa.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DataAbstraction.Provider { public interface IDataProvider<T> { List<T> context { get; set; } void Insert(T t); void Edit(T n, T o); void Delete(T t); List<T> Select(); } }
Ed ecco il gioiellino "il mio nuovo generic dataAdapter" a cui posso far fare quasi tutto ...
L'unica cosa e che per non sfruttare "reflection" che mi potrebbe ammazzare le prestazioni ho dovuto gestire l'edit un un modo un pò bruso, per andare mi serve necessariamente l'item modificato, e il vecchio item. Non escludo qualche evoluzione di questo in futuro, ma penso di essere arrivato ad un buon compromesso, non ho tipi "fissi".
using System; using System.Collections.Generic; using System.Linq; using System.Text; using DataAbstraction.Data; namespace DataAbstraction.Provider { public class DataProvider<T>:IDataProvider <T> { List<T> context { get; set; } public void Insert(T t) { context.Add(t); } public void Edit(T n, T o) { for (int i = 0; i < context.Count(); i++) { if (context[i].Equals(o)) { context[i] = n; } } } public void Delete(T t) { context.Remove(t); } public List<T> Select() { return context; } } }
Nessun commento:
Posta un commento