Skip to main content

Posts

Showing posts from August, 2010

Action delegate

Cei de la M$ au venit in ajutorul dezvoltatorilor cu Action delegate. Nu a venit cu .NET 4.0, aceștia au apărut cu .NET 2.0 și nu are nimic special, este de fapt un delegate generic, care ne permite definirea unei acțiuni care să fie executa pentru un obiect. Fara să ne dam seama folosim Action in fiecare zi. De exemplu metoda ForEach din List este un Action.
Acesta poate să fie folosit foarte ușor in combinație cu metodele anonime ca in exemplul de mai jos:
public static void Main()
{
Action actiune = ExecutaActiune();
actiune(1,2);
}

public static Action ExecutaActiune()
{
return delegate(int valoare1,int valoare2)
{
Console.WriteLine(valoare1+valoare2);
};
}
sau
public static void Main()
{
Action actiune = new Action(Add);
actiune(1,2);
}
public static void Add(int valoare1,int valoare2)
{
Console.WriteLine(valoare1+valoare2);
};
Nimic complicat pana aici. La fel …

Cast using AS keyword

Cînd dorești să faci un cast .NET iți oferă mai multe posibilități. Astăzi o să vorbim despre doua dintre ele, varianta clasica, folosind paranteze și cea folosind AS.
Mod de folosire:
IEntity entity=(IEntity)student;sau
IEntity entity=student as IEntity;
if(entity==null)
{
//do something.
}else
{
...
}
Cînd se foloseste AS trebuie sa fim atenți in cazul in care cast-ul nu se poate face, moment in care variabila o sa aibe valoarea NULL. In general o sa fie nevoie sa se verifice daca cast-ul s-a putut face sau nu.In cele mai multe scenarii din lumea reala, o sa avem nevoie ca o exceptie sa fie aruncata, deoarece este posibil ca un alt tip sau assembly sa fi fost folosit. Sunt momente cand AS isi gaseste locul. In metodele private unde s-a facut deja o validare a datelor folosite sau avem certitudinea ca datele primite sunt asa cum ne asteptam.
Dar AS mai ascunde ceva, o problema de performanta. Mecanismul care sta in spate nu este magic deloc. In spate se face o verificare simpla, dacă con…

Custom Guid generator.

Citeam un post a lui Ayende care se plangea de forma encriptata pe care o au Guid-urile. Adevarul este ca sunt foarte greu de citit. Daca avem nevoie de Guid-uri mai usor de inteles dar care totusi sa poata fi generate pe masini diferite putem genera Guid-uri custom.
Primele n caractere se pot inlocuii de exemplu cu niste caractere pe care noi sa le definim. Mai jos am descris o posibila soluție( click pe poza pentru a vizualiza codul):

LightSwitch - un pas in fata spre limbajele de generatia a IV-a

Si uite ca s-a lansat LightSwitch Beta 1. Nu știu dacă ați auzit de el, este un produs la care M$ lucrează de ceva vreme.
Prin intermediul acestuia si a Silverlight 4, LightSwitch iți permite să iți definești un model pe baza căruia se generează atît partea de persistenta cat si UI + comunicarea client-server. Era de așteptat acest pas, după lansarea noii versiuni de Entity Framework( 4.0).
Cu ajutorul lui se poate dezvolta într-un timp redus soluții bussines atît desktop cat si web. Soluțiile business se invart de obicei in jurul a doua lucruri: datele si modul in care acestea se afișează pentru a putea fi vizualizate si editate. In general avem foarte multe date de editat si controlat, iar mare parte din timp ne ocupam de dezvoltarea editoarelor si a modului de vizualizare a acestora. Partea de procesare in batch e doar o mica parte din ceea ce trebe dezvoltat. Aceste doua lucruri LightSwitch isi propune sa le ofere pe tava: date + UI pentru aceste date.
Datele se definesc prin interme…

Parametrii opționali - posibile probleme la versionare

Cu toții am auzit de parametrii opționali. VB suporta de foarte multa vreme. Începînd cu .NET 4.0 si C# suporta parametrii opționali.
Pe scurt parametrii opționali iți permit să ai parametrii la o metoda cu o valoarea default. A.i. acești parametrii pot fi omiși din apel. publicstaticvoid Example(string s1, string s2 = "2",
string s3 = "3")
{
Console.WriteLine(s3);
}Apelul poate să fie de forma următoare:
Example("1","21","31");
Example("1");Example("1","2");
Dar ce se întîmpla dacă avem doua versiune de assemply. In noua versiune va hotărați să adaugăm metoda: publicstaticvoid Example(string s1, string s3 = "3")
{
Console.WriteLine(s3);
}

Apel:
Example("1","2");Dacă nu recompilam clientul, dar adaugăm noua versiune de assembly, metoda apelata o să fie tot cea din prima versiune. Dar ce se întîmpla dacă recompilați clientul cu a doua versiune de assembly? Fara nic…

Guid.Comb

In ultimele zile am început sa lucrez cu Fluent NHibernate si am descoperit GuidComb. M-am documentat sa vad ce înseamna de fapt. Pe scurt:
One of the better alternatives that i kinda like is the guid.comb strategy. Using regular guids as a primary key value leads to fragmented indexes (due to the randomness of the guid’s value) which leads to bad performance. This is a problem that the guid.comb strategy can solve quite easily for you.
sursa
Nu are rost sa traduc și să explic din nou acelasi lucru. O să găsiți pe Google destule materiale. Partea interesanta este modul in care se generează aceste guiduri.
Din cei 32 de biti pe care un guid ii conține, 16 sunt generați in funcție de configurația hardware a mașinii( începînd cu Windows 2000, seria plăcii de rețea nu se mai folosește).
Iar următorii 16 sunt generați in forma următoare:
0-9: se generează pe baza unui uniqueidentifier( depinde de framework);10-15: pe baza la Datetime;Acesta este un algoritm de generate de Guid destul de si…